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的目录分隔符,这样便能在不同的操作系统上运行了。

 

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读取一个以行分隔符结束的行。