2017-07-11 76 views
3

此代码的目标是将字符串“A Happy”更改为“Hippy”。使用字符数组打印字符串而不是创建新的字符串对象

String originalStr = "A Happy"; 
char[] charOriStr = originalStr.toCharArray(); 
charOriStr[3] = 'i'; //simplified code, we are supposed to loop through the String 

要打印修订字符串,我用:

System.out.println(charOriStr); 

但是推荐解如下:

String revised = new String(charOriStr); 
System.out.println(revised); 

我是一个初学者,我不知道,如果我应该按照推荐的解决方案作为最佳实践指南?在此欣赏一些指导,谢谢。

+0

为什么不使用'String'中的'replaceAll'方法? – Jobin

+0

'for(char ch:charOriStr)System.out.print(ch); System.out.println();' –

+2

在你的第一个代码片段中,'revised'没有被定义。如果你直接通过'System.out.println(修改)'来关注它,'你会看到一个错误,说'修改'是未知的 – Aaron

回答

3

这么推荐的人显然是错的。既然你已经有了char数组,你不需要再次将它转换为String,只需要打印即可。因为您正在使用的println方法将再次将您的字符串转换为内部的char数组。

+0

抱歉,我不清楚你最后的陈述。您能否详细说明'您正在使用的println方法会再次将您的字符串转换为内部的char数组。'? – yogescicak

+1

@yogescicak我的意思是,如果您再次查看println方法的内部实现,它会在打印到控制台之前将char []转换为字符串 –

2

您可以使用StringBufferStringBuilder并编辑相同的输入,而不是创建一个新的。

public class HelloWorld 
{ 
    public static void main(String[] args) 
    { 
     StringBuilder str = new StringBuilder("A Happy"); 
     str.setCharAt(3,'i'); 
     System.out.println(str); 
    } 
} 

底线 - 退房StringBuilder,有很多很酷的东西,你可以用它做。

2

A char[]是Java 8以前的实现。对于可以为世界上所有脚本保存Unicode文本的字符串,包括拉丁文,阿拉伯文,希腊文,西里尔文等。

保持字符串的抽象层次更多... 抽象,当然完全完成。 如果你想在汽车中替换一个线圈,你不希望收到它作为一个部件的集合。

例如char是UTF-16编码的一个2字节值,Unicode的一种形式。现在的int值,所谓的码点有较少的不规则性。所以你可以基于代码点来制定解决方案,并且也可以处理中文。

+0

对不起,但我不明白这里的逻辑。无论如何,String的内部会形成一个char数组。所以在字符串内部会遇到同样的问题。不是吗?纠正我,如果我错了。 –

+0

@SureshAtta String的方法适当地处理UTF-16代理。逐个打印字符与将整个字符串转换为“UTF-8”进行打印效果不同。 – RealSkeptic

相关问题