java的String类的认识与修改

  前面我们初步认识java了,那么Java中字符串是不是可以修改呢?,在C语言中,如果我们想要修改字符串非常简单(除常量字符串),但在java中也一样吗?其实不是,在Java中字符串是不能修改的,为什么呢,如果我们去查看Sting的内部,就会发现他的value是被final修饰的,而被final修饰就会被认为是常量,而常量是不能被修改的。这时你可能会说,那么我们怎么修改字符串呢?我明明见过别人修改了字符串的。欸,这你就有所不知了,在java中,修改后的字符串其实不是原来的字符串,而是新创建了一个字符串,然后将它给返回过来,也就是说,你看到的修改后的字符串已经不是你原来创建的那个了,它们之间的地址值都不同。

String str = "ffffvd";
System.out.println(str.hashCode());//你可以将hashCode的值看作是地址
str = str.replace('f','d');
System.out.println(str.hashCode());

那么我们如何去修改字符串呢?我这里提供几个方法,如果你不想要修改任何字符,只想要在前面或后面添加其他字符串,那么我们可以直接加起来,它们会自动拼接起来。

while (true){
    String ch = scanner.nextLine();
    str += ch;//如果想要加在前面,将它变成 str = ch + str就行
}

如果拼接次数多了,代码效率就会下降,因此我们需要创建一个变量,用来接收原字符串和要拼接的字符,我们可以这样写

Scanner scanner = new Scanner(System.in);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(str);
while (true){
    String ch = scanner.nextLine();
    stringBuilder.append(ch);
    break;
}//这只是为了展示如何增加效率,实际按需求来设计

为什么这样写会比前面的效率高呢?这就是后面要说的了,暂时卖个关子。如果我想修改里面的字符怎么办?我们可以先将原字符串的内容提取出来变成字符数组,然后用下标对其进行修改,在将其转变为字符串在返回。

char[] arr = str.toCharArray();
arr[0] = 'd';
str = new String(arr);

你说你既要修改又要增删,那么可以将两个给结合起来就行,首先创建一个字符数组,长度为你要求的,然后将它们去该数组,然后对里面的数组进行修改成你想要的就行,在将其转变为字符串返回就行。你可能会说这也太麻烦了,能不能简单点。当然可以,不过我们以后再说。

你可能感兴趣的:(java)