学习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

总结

感谢您一直浏览到最后。我觉得这些方法都非常实用。
然而,并未涵盖所有方法,所以将来我还希望学习更多新的内容。
如果有错误或其他,请提供评论。