2.1 字符串和文本IO
字符串是由字符构成的序列。在JAVA中字符串是一个对象。
构造字符串:
1. String newString = newString(stringliteral);
2. String newString = “welcome toChina”;
3. char[] stringLiteral ={‘w’,‘w’};
String newString = new String(stringliteral);
字符串在程序设计中是不可变的,重新赋值意味着又new出了一个新的对象出来。JAVA中为了节省内存提高效率,对相同字符串共用一个实例。
运算符==只能检测两个字符串变量是否指向同一个对象;
Equal检测内容是否相等。
compareTo
s.length() 获取字符串中字符个数,s.concat(s1) 连接, + 也可以连接,但必须有一个操作数是字符串。
获取子串String m = “Anglebaby”.substring(0,5);
字符串转换成数组: char[] c = “java”.toCharArray();
或者“lkjkljlk”.getChar(2,5,s,5);
字符或者数值转换成字符串:String.valueOf(5.44);
格式化字符串:String s = String.format(“%5.2”,35.444);
2.2正则表达式(regular express)
定义:指定某个模式来匹配、替换或分隔一个字符串。例如:
“Java is fun?”.matches(“Java.*”);
String s = “a+b$#c”.replaceAll(“[#$]” , “QQQ”);
String[] s = “Java,C?C#C++”.split(“[.,:;?]”);
2.3 StringBuilder/StringBuffer
String对象一旦创建,他的值就确定了,而StringBuilder和StringBuffer可以追加、插入、添加新的内容。
StringBuilder特点是修改缓冲区的方法是同步的,其他情况两者基本类似。
多任务使用StringBuffer,单任务使用StringBuilder。
StringBuilder(); 构建一个容量为16的字符串生成器
StringBuilder(capacity: int); 构造制定容量的字符串生成器
StringBuilder(s:String); 构造指定字符串的字符串生成器
用StringBuilder()来创建字符串生成器,用toString()方法获取字符串。例如:
StringBuilder sb = new StringBuilder(s);
sb.reverse();
s = sb.toString();
String和StringBuilder内部结构是数组。
另外特别需要注意的一点是,String传递的是字符串值,StringBuilder传递的是它的地址值。如下例所示:
public class Test {
public static void main(String[] args) {
String s = "java";
StringBuilder sb = new StringBuilder(s);
change(s,sb);
System.out.println(s);
System.out.println(sb);
}
public static void change(String s , StringBuilder sb) {
s = s + "Html";
sb.append("Html");
}
}
2.4 命令行参数
Main方法的声明与众不同,但实际上就像是一个带参数( String[] args )的普通方法。Main方法即可以被调用,也可以被命令行传递参数。命令行也主要是在干这个。
Main方法也有需要注意的是:
public staticvoid main(String[] args)
can be replaced by
public staticvoid main(String args[])
public staticvoid main(String[] x)
public staticvoid main(String x[])
因为main也是一种方法,传递的是String类就可以。
2.5文件File
存储在变量、数组和对象中的变量是临时的,随着程序的终止而消亡。以文件的形式存储在磁盘中可以永久的保存。
JAVA中提供了File类来获取文件的属性以及删除和重命名文件。但是File类不包含读写文件的方法,它是文件名及其路径的包装类。
在java中 \\ (反斜杠)表示目录的分隔符,在程序中最好不要直接使用绝对文件夹,这样不方便移植到其他系统上。可以用 / (斜杠)这种Java的目录分隔符,这样便能在不同的操作系统上运行了。
PrintWrite类可以用来创建文件并向文件夹中写入数据,如果文件不存在,会调用PrintWrite的构造方法来创建一个文件。如果存在,那么文件当前内容被废弃。
Java 强制要求编写代码来处理PrintWriter构造方法抛出的异常,只要在头中声明 throws Exception即可。另外必须用close()方法关闭文件,不然数据就不能正确保存在文件中。
另外PrintWrite类中,println方法除了打印一个行分隔符以外,,其他都和print方法一样。Windows中\r\n表示行分隔符,Unix中\n表示行分割符。
java.util.Scanner用来从控制台读取字符串和基本数据类型数值。
Scanner input = new Scanner(System.in);
从文件中读取: Scanner input = new Scanner(newFile(filename));
虽然没有必要关闭输入文件,但是这样可以释放被文件占用的资源。
new Scanner(String) 为 给定的字符串创建一个Scanner。
Scanner当中的方法,nextByte()、nextShort()、nextInt()、nextLong()、nextFloat()、next()称为令牌读取方法(token-reading method),因为他们会读取用分隔符分隔开的令牌,分隔符默认情况下是空格。可以用useDelimiter(Stringregex)方法设置新的分隔符模式。
输入的工作过程:一个令牌读取方法首先跳过任意分隔符,然后读取一个以分隔符结束的令牌。nextLine读取一个以行分隔符结束的行。