Java String 类 字符串
in Java知识速查 with 0 comment

Java String 类 字符串

in Java知识速查 with 0 comment

01 字符

字符串提供了提取字符的方法charAt,这个方法会返回一个char,这是一种存贮单个字符的基本类型。

String fruit="banana";
char letter =fruit.charAt(0);

实参0表示要提取位置0处的字符。与数组索引一样,字符串索引也从0开始,因此,赋给变量letter的字符是b。

字符的工作原理与其他基本类型相似,可用关系运算符来比较它们;

if(letter=='a'){
System.out.println('?')
}

递增和递减运算符也可用于字符,因此下面的循环显示字母表中的所有字母:

System.out.println("Roman alphabet");
for(char c='A';c<'Z';c++){
System.out.println(c);
}
System.out.println();

Java用Unicode表示字符,因此包含许多的非字母文字。

02 字符串是不可修改的

字符串提供了方法toUpperCase和toLowerCase,他们可分别转换为大写和小写。
这些方法常常令人迷惑,因为他们好像修改了字符串,但实际上,这些方法以及其他字符串操作方法都不能修改字符串,因为字符串是不可修改的。
对字符串调用toUpperCase将生成并返回一个新的字符串对象。例如:

String name="Alan Turing";
String upperName=name.toUpperCase();

这些语句执行后,upperName将指向字符串“ALAN TURING”,但name仍然指向“Alan Turing”。
另外一个很有用的方法是replace,它在字符串中查找并替换指定的字串,例如:

String text="Computer Sciene is fun";
text=text.replace("Computer Science","CS");

这段代码将Computer Science替换为了CS。
注意!:replace不会修改原来的text中的内容!
这就意味着L如果你不保存返回的值,调用text.replace将不会有任何的影响。

03 字符串遍历

下面的循环遍历了字符串变量fruit中的字符,并以每一个字符独占一行方式显示:

for(int i=0;i < fruit.length();i++ ){
char letter=fruit.charAt(i);
System.out.println(letter);
}

遗憾的是,改进的for循环不在能够用于便利字符串,但是你可以这样做:

for(char letter:fruit.length){

System.out.println(letter);

}

很多的字符串遍历操作涉及读取一个字符串并创建另外一个字符串,例如,想要反转字符串,可按照从后往前的顺序将字符依次加入到另一个字符串中:

public static String reverse(String s){
String r="";
for(int i=s.length()-1;i >= 0 ;i--)
    r=r+s.charAt(i);
return r;
}

04 子串

方法substring 返回一个新的字符串,其中包含已有字符串中从指定索引到末尾的字符。
fruit.substring(0)返回“banana”
fruit.substring(2)返回“nana”
fruit.substring(6)返回“”
这个方法和其他大多数字符串方法一样都被重载过,fruit.substring(0,3)返回“ban”,相信你已经明白了怎么使用。

05 方法indexOf

这个方法用于在字符串中查找字符:

String fruit="banana";
int index=fruit.indexOf('a');

这个示例确定了'a'在字符串中的索引,但这个字符出现了三次。请注意:indexOf的返回结果为第一次出现的索引。
如果字符串中没有指定的字符,indexOf()将返回一个-1.
还可以用indexOf查找子串,而不仅仅是单个字符:
fruit.indexOf("nan")返回值是2.

06 字符串比较

简单来说:
==是通过比较引用来判断两个变量指向的是否为一个对象。
要比较字符串,正确的做法应是方法equals
下面这段代码是方法equals的实现

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {        //instanceof 来判断是不是一个类的对象
            String anotherString = (String)anObject;
            int n = value.length;//value为String类的成员
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
Responses