我试图用这种方式复制一个单词。我不确定,我正在按照正确的方式处理String
。
代码是:
public static void main(String args[])
{
String str="Hello";
int i=0;
String copy = "";
while (str.charAt(i) !='\0')
{
copy = copy + str.charAt(i);
i++;
}
System.out.println(copy);
}
运行此代码会产生Exception
:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5
at java.lang.String.charAt(Unknown Source)
at ReverseWord.main(ReverseWord.java:15)
我使用charAt()
并以正确方式检查null吗?或者,我对String
中的Java
处理有错误的概念?
答案 0 :(得分:4)
您正在以错误的方式使用String
(对于Java
!)让我们澄清在Java中使用字符串的一些基本要点:
String
是不可变的。这意味着每次修改它时JVM
都会创建一个新对象。这是很多资源,因此,为了更好的编程,您不应该在String
中使用连接,以使用StringBuilder
连接。Strings
不会以任何特殊符号结尾,这可能发生在某些文件类型中,但不会发生在Strings
个对象上,因此您必须使用{{1}获取大小并在必要时使用它进行迭代。StringAPI7
StringAPI8
length()
字符,您可以使用String
,for
以及其他几种方式(拆分,转换......)来执行此操作:For循环示例:
while
虽然例子:
for (int i = 0; i < str.length(); i++)
说...看看这段代码使用和使用解释的内容:
while (i < str.length()) {
<强>更新强>
谢谢......但是当我试图找到反向时没有得到结果
如果你想要的是反转public static void main(String[] args) {
String str = "Hello";
int i = 0;
// string builder is a mutable string! :)
StringBuilder copy = new StringBuilder();
// we iterate from i=0 to length of the string (in this case 4)
while (i < str.length()) {
// same than copy = copy + str.charAt(i)
// but not creating each time a new String object
copy.append(str.charAt(i));
// goto next char
i++;
}
// print result
System.out.println(copy);
}
(你的代码没有这样做,你必须写String
)对copy = str.charAt(i) + copy;
来说要容易得多。看一下这个例子:
StringBuilder
答案 1 :(得分:1)
第一种方式:
使用以下代码:
for (int i = 0; i < str.length(); i++) {
copy = copy+str.charAt(i);
}
第二种方式:
将String
转换为char[]
。然后将其转换回String
。
char[] ch = str.toCharArray();
String copy = new String(ch);
System.out.println(copy);