强制类型转换
JAVA 强制类型转换根据基本数据类型的大小考虑是否会丢失精度,例如:
int-> long 不会丢失精度。
long->int 可能会丢失精度
char->int, short->int, byte->int 不会丢失精度。
int->double 不会丢失精度。
int->float 可能会丢失精度。
强制类型转换格式和c/c++一样
double x = 9.99
int nx = (int) Math.round(x)
字符串
Java的字符串是Unicode字符序列。Java本身没有内置字符串,但是在标准库中定义:java.lang.string;
字串
String greeting = "Hello";
String s = greeting.substring(0,3); // Hel
字符串拼接
字符串拼接有2种主要方法,第一使用算术运算符,第二种使用字符串构建器。
使用算术运算符
// Help!
String greeting = "Hello";
String s= greeting.substring(0,3)+"p!"
理论: 不可变的字符串对象
String类对象称为不可变字符串, 字符串"Hello" 永远包含H E L L O 代码单元序列,而不能改变其中任何一个字符: 例如在c/c++中 greeting[3] = 'o' 这种语句在java中是不被允许的。修改字符串可以让他引用另一个字符串,就像上面做的一样。
注意: 和C/C++不一样 ,字符串不是字符类型的数组。
判断字符串是否相等
s.equals(x); // true or false
与c++的对比
在java中不能重载算术运算符,意味着不能使用 str3 = str1 + str2,或者 if(str1 == str2) 这种表达式
StringBuilder java.lang.StringBuilder
函数名 | 作用 |
---|---|
StringBuilder() | 构造器函数 |
int length() | 返回构造器活缓冲器中的代码单元数量 |
StringBuilder append(String s) | 追加字符串并返回this指针 |
StringBuilder append(char c) | 追加字符并返回this指针 |
StringBuilder appendCodePoint(int cp) | 追加一个代码点,并返回其转换未一个或两个代码单元并返回this |
void setCharAt(int i, char c) | 将第i个代码单元设置位c |
StringBuilder insert(int offset, String str) | 在 offset 位置插入一个字符串并返回this |
StringBuilder insert(int offset, char c) | 在offset位置插入一个字符并返回this |
StringBuilder delete(int startIndex, int endIndex) | 删除startIndex 到 endIndex区间的字符串 |
String toString() | 返回一个与构造器或缓存器内容相同的字符串 |
码点及码点单元
代码单元
Java的字符串由 char值序列组成。char数据类型是一个UTF-16编码表示Unicode码点的代码单元。 大多数Unicode使用一个代码单元表示就够了,但是辅助字符需要一对代码单元表示。
使用 length() 返回代码单元数量(不是码点数量)
使用 charAt(int i)得到第i个代码单元
码点
想要得到第i个码点,使用:
int index = greeting.offsetByCodePoints(0,i);
int cp = greeting.codePointAt(index);
判断一个码点是否为辅助字符使用:
int cp = sentence.codePointAt(i);
Character.isSupplementaryCodePoint(cp)) i+=2;
else i++;
输入输出 Scanner java.util.Scanner
输入读取
通过控制台进行输入,需要构造一个与标准输入流(system.in)关联的Scanner:
Scanner in = new Scanner(System.in);
System.out.print("what is your name");
String name = in.nextLine(); // 包含空格
String name2 = in.next(); // 不包含空格
String age = in.nextInt(); // 读取整数
String dage = in.nextDouble();// 读取浮点数
Scanner 函数
函数名 | 描述 |
---|---|
Scanner(InputStream in) | 用给定的输入流创建一个Scanner对象 |
String nextLine() | 读取输入的下一行的内容 |
String next() | 读取输入的下一个单词(空格作为分隔符) |
int nextInt() | 读取并转换下一个表示整数或浮点数的字符序列 |
double nextDouble() | 读取并转换下一个表示整数或浮点数的字符序列 |
boolean hasNext() | 读取输入流中是否还有其他单词 |
boolean hasNextInt() | 检测是否还有整数或夫电视的下一个字符序列 |
boolean hasNextDouble() | 检测是否还有整数或夫电视的下一个字符序列 |
java.io.Console 对象
static char[] readPassword(String prompt, Object ... args);
static String readLine(String prompt, Object...args);
格式化输出数字
转换符 | 类型 |
---|---|
d | 十进制整数 |
x | 十六进制整数 |
o | 八进制整数 |
f | 定点浮点数 |
e | 指数浮点数 |
g | 通用浮点数 |
a | 十六进制浮点数 |
s | 字符串 |
c | 字符 |
b | 布尔 |
h | 散码列 |
tx/Tx | 时间日期(T强制大写,已经过时) |
% | 百分号 |
n | 与平台有关的换行符 |
格式化标志
标志 | 目的 | 举例 |
---|---|---|
+ | 打印整数和负数的符号 | -300 or + 300 |
空格 | 在整数之前添加空格 | ( 33.33) |
0 | 在数字前面补0 | 033 |
- | 左对齐 | (33.33 ) |
( | 负数包含在括号内 | (3333) |
, | 添加分组分隔符 | 3,33 |
文件的输入和输出
如果要对文件进行操作,需要使用File对象构造一个Scanner对象,例如:
文件读取对象构造
Scanner in = new Scanner(Paths.get("C:\\mydirectory\\myfile.txt","utf-8")
文件写入对象构造
Scanner in= new Scanner(Paths.get("C:\\myfile.txt"));
java.util.Scanner
Scanner(File f);
Scanner(String data);
java.io.PrintWriter
PrintWriter(String fileName);
java.nio.file.Paths
static Path get(String pathname);
网友评论