学习Java编程的String功能
字符串类
Java中的String类。由于隐藏了数组,因此可以提供操作字符串的方法。
创建String类的实例
String a = new String("こんにちは"); //newを使う
String b = "こんばんは"; //newは省略できる
//☆文字列であるため、ダブルクォーテーション!
字符串对象是不可变(immutable)的对象。
将通过设置对象一次的字段值,并且可以在之后更改的对象称为”可变对象”,而无法更改的对象称为”不可变对象”。
“不可变对象”的代表例是String对象。
当我听到“不变”这个词时,我觉得完全无法改变其内涵,但是通过以下代码我们可以看到狗变成了猫。
String str = "犬";
str = "猫";
System.out.println(str);
//実行結果
猫
一开始看起来好像值被重新赋值了,但实际上并不是值本身被重新赋值了。
String对象作为引用类型,当它的字段被赋予另一个值时,会为新值分配一个新的地址,并将新值存储在该地址对应的位置。
由于可能发生这样的情况,有时会定义对象的内部数据不能被修改。
下面有四种方法:
1. 将所有字段都标记为私有(private)。
2. 不提供能够修改内部数据的setter方法等。
3. 声明类为final,防止重写(override)。
4. 不提供getter方法等。
//例
public final class Sample {
private final String name;
public Sample(String name) {
this.name = name;
}
public void dog() {
System.out.println(name + "ちゃん");
}
}
String类的方法
valueOf方法
使用valueOf方法,可以将值转换为String类型。
//使用例
int a = 100;
String str = String.valueOf(a);
System.out.println(str);
toString方法
与valueOf方法类似,可以将值转换为String类型。
//使用例
int b = 200;
String str = Integer.toString(b);
System.out.println(str);
☆valueOf方法和toString方法的区别
在以下情况中,当要转换的值为null时,会出现不同的行为。
int c = null;
//valueOfの場合
String d = String.valueOf(c);
System.out.println(d);
//結果・・・String型のnullが返される
null
//toStringの場合
String e = Integer.toString(c);
System.out.println(e);
//結果・・・例外がスローされる(java.lang.NullPointerException)
replaceAll方法
replaceAll 方法可以搜索字符串并将匹配的部分替换为指定的字符串。
*有时会使用正则表达式作为搜索部分。如果不使用正则表达式,则可以使用不带 “All” 的 replace 方法,但最终仍然是在内部调用 replaceAll 进行处理的。
String f = "hellocathello";
//replaceAll(検索する文字列, 置換する文字列);
f = f.replaceAll("hello", "bye");
System.out.println(f);
//結果
byecatbye
替换方法
replaceAll方法与replaceAll类似,用于替换字符串的方法。
String f = "aaaaa";
System.out.println(f.replace("aa", "b"));
//結果
bba
String f = "aaaaa";
System.out.println(f.replace('a', 'b'));
//結果
bbbbb
如果指定的参数不存在,则返回原始字符串。
String f = "aaaaa";
System.out.println(f.replace("zz", "b"));
//結果
aaaaa
当char型和CharSequence型混合使用时,会产生编译错误。
String f = "aaaaa";
System.out.println(f.replace("aa", 'b'));
字符位置方法
这个方法是从字符串中提取指定位置的一个字符。
位置(顺序)的计算方式和数组一样,从左边开始按照从0开始的顺序依次计数。
※如果将不存在的位置作为参数指定,将抛出java.lang.StringIndexOutOfBoundsException异常。
String g = "abcde";
System.out.println(g.charAt(2));
//abcde
//↓↓↓↓↓
//01234(順番)
//結果
c
indexOf方法
他将检查在指定的参数中,字符在字符串中的位置。
这里的位置计数方式与数组相同。
String h = "abcde";
System.out.println(h.indexOf('a'));
System.out.println(h.indexOf('z'));
//結果
//※同じの文字が複数ある場合は、最初に存在する位置を教えてくれる。
0
//指定の文字が存在しない場合は、-1を返す。
-1
字符串截取方法
使用数字作为参数,从字符串中提取任意的子字符串。
提取的方式如下所示。
「|」的左边从0开始逐个编号为1,2,3,4,5…。
如果指定两个参数,例如指定0和3作为参数,则提取“abc”。
如果指定1和5作为参数,则提取“bcde”。
String i = "abcde";
System.out.println(i.substring(0, 3));
System.out.println(i.substring(1, 5));
//結果
abc
bcde
只需要一个选项:仅指定一个参数
例如,如果指定参数为2,则提取“|”后的第2个字符“cde”。
String j = "abcde";
System.out.println(j.substring(2));
//結果
cde
长度方法
这是一个返回字符数量的方法。
无论是半角英数字还是全角字符,都会被视为一个字符。
String k = "abcde";
System.out.println(k.length());
//結果
5
startsWith方法
判断字符串是否以指定的参数开头。结果以true或false的布尔值返回。
String l = "hello";
System.out.println(l.startsWith("he"));
//結果
true
endsWith方法
当我们使用给定的参数来检查一个字符串是否以指定的字符结尾时,它会返回一个布尔值来表示结果。
String m = "hello";
System.out.println(m.endsWith("o"));
//結果
true
总结
感谢您一直浏览到最后。我觉得这些方法都非常实用。
然而,并未涵盖所有方法,所以将来我还希望学习更多新的内容。
如果有错误或其他,请提供评论。