所以我试图改写一个句子,即使编译时我没有任何错误,它告诉我我的反向句子是不合格的。
- 它应该像这样工作:"你好,世界!" - > !dlrow,olleh"
代码:
String sentence="this is a sentence!";
String reverseSentence=sentence;
for(int counter=0;counter<sentence.length();counter++)
{
char charToReplace,replaceChar;
charToReplace = reverseSentence.charAt(counter);
replaceChar = sentence.charAt(sentence.length()-counter);
reverseSentence=reverseSentence.replace(charToReplace, replaceChar);
System.out.println(reverseSentence);
}
答案 0 :(得分:2)
您获得异常的原因是,在<batch:step id="step1">
<batch:tasklet>
<batch:chunk reader="reader" processor="processor" writer="ItemWriter" commit-interval="3">
<batch:streams>
<batch:stream ref="pol01ItemWriter"/>
<batch:stream ref="pol02ItemWriter"/>
</batch:streams>
</batch:chunk>
</batch:tasklet>
</batch:step>
时,sentence.charAt(sentence.length()-counter)
在计数器为0时超出范围。应为sentence.length()-counter
。
然而,正如Tunaki评论的那样,您的代码还存在其他问题。我建议您使用sentence.length()-1-counter
构建反向StringBuilder
,而不是使用String
(这将替换第一个字符与第二个字符的任何匹配)。
答案 1 :(得分:1)
它不会显示错误,因为有关索引的异常发生在RunTime。
这里:
replaceChar = sentence.charAt(sentence.length()-counter);
您正在尝试访问String(19-0)的索引19。替换为:
replaceChar = sentence.charAt(sentence.length()-counter-1);
我建议你在你的情况下使用StringBuilder
。
使用reverse()
方法:
String sentence = "this is a sentence!";
String reversed = new StringBuilder(sentence).reverse().toString();
System.out.println(reversed); // Prints : !ecnetnes a si siht
或使用append()
方法构建新的String对象。这比使用String
使用更少的内存,因为每次循环时它都不会创建新的String
对象:
String sentence = "this is a sentence!";
StringBuilder reversed = new StringBuilder();
for (int i = 0 ; i < sentence.length() ; i++){
reversed.append(sentence.charAt(sentence.length() - 1 - i));
}
System.out.println(reversed.toString()); // Prints : !ecnetnes a si siht
答案 2 :(得分:1)
您可以使用字符数组来实现您的需求,
String sentence = "ABDEF";
char[] firstString = sentence.toCharArray();
char[] reversedString = new char[sentence.length()];
for (int counter = 0; counter < sentence.length(); counter++) {
reversedString[counter] = firstString[sentence.length() - counter -1];
}
System.out.println(String.copyValueOf(reversedString));
答案 3 :(得分:0)
最好不要做任何替换或循环。你从字符串创建一个char数组,反转数组,然后从反转数组创建一个字符串,这将完成你没有任何移动部件或替换的问题。例如:
String hw = "hello world";
char[] hwChars = hw.toCharArray();
ArrayUtils.reverse(hwChars);
String wh = new String(hwChars);
System.out.println(wh);
答案 4 :(得分:0)
只需在每个空格处拆分String并将其放在String数组中,然后以相反的顺序打印数组
public static void main(String[] args) {
String sentence = "this is a sentence!";
String[] reverseSentence = sentence.split(" ");
for (int i = reverseSentence.length-1; i >= 0; i--) {
System.out.print(" " + reverseSentence[i]);
}
}