我试图在不使用拆分功能的情况下反转句子中的字符。我真的很接近,但我错过了最后一封信。有人可以指出我正确的方向吗?现在它打印“这是一个新句子”作为“sihT si a wen cnetnes”我还包括 if(start == 0)因为程序会跳过初始空格字符,但我不知道明白为什么?
static String reverseLetters(String sentence)
StringBuilder reversed = new StringBuilder("");
int counter = 0;
int start = 0;
String word;
for(int i = 0; i <= sentence.length()-1 ; i++ )
{
if(sentence.charAt(i)== ' '|| i == sentence.length()-1 )
{
StringBuilder sb = new StringBuilder("");
sb.append(sentence.substring(start,i));
if(start == 0)
{
start = i;
word = sb.toString();
reversed.append(reverseChar(word));
reversed.append(' ');
}
else
{
start = i;
word = sb.toString();
reversed.append(reverseChar(word));
}
}
return reversed.toString();
}
static String reverseChar (String word)
{
StringBuilder b = new StringBuilder("");
for(int idx = word.length()-1; idx >= 0; idx -- )
{
b.append(word.charAt(idx));
}
return b.toString();
}
答案 0 :(得分:4)
start
表示wordStart
。当我指向空间时,下一个wordStart应该指向i。i
应该指向最后一个字词char,应该是length()
可以无条件循环,并且在循环代码中间的i == length()中断。
答案 1 :(得分:3)
另一个选择
private String reverse (String originalString) {
StringBuilder reverseString = new StringBuilder();
for (int i = originalString.length() - 1; i >= 0; i--) {
reverseString.append(originalString.charAt(i));
}
return reverseString.toString();
}
答案 2 :(得分:3)
我认为错误在于索引,for
应该是
for(int i = 0; i <= sentence.length() ; i++ )
然后if
应为:
if (sentence.charAt(i==0?0:i-1)== ' '|| i == sentence.length() )
对我来说,错误将是最后一个substring(start,i)
的{{1}}应该是sentence.length而不是sentence.length-1,所以这将解决它。
Substring在最后一个索引中打开,所以如果你把i
放在从1到9的子串中。这可能是最后一个字的问题。
第一个空格的东西也是子字符串的问题,让我们说你正在阅读“这是......”它第一次用substring(1, 10)
和start=0
做一个子字符串你期待“这个”,但它确实是“这个”。下一次阅读i = 4
和start=4
将是“是”。
因此,通过更改索引,您应该能够使用i=7
删除if / else。
答案 3 :(得分:3)
String reverseString = "This is a new sentence";
System.out.println(new StringBuffer(reverseString).reverse().toString());
Syso prints : ecnetnes wen a si sihT
答案 4 :(得分:1)
放
i <= sentence.length()
在for循环中,将if更改为:
if(i == sentence.length() || sentence.charAt(i)== ' ')
as
substring(start,i)
返回最多i的字符串,不包括在内。
答案 5 :(得分:1)
import java.util.Stack;
public class Class {
public static void main(String[] args) {
String input = "This is a sentence";
char[] charinput = input.toCharArray();
Stack<String> stack = new Stack<String>();
for (int i = input.length() - 1; i >= 0; i--) {
stack.push(String.valueOf(charinput[i]));
}
StringBuilder StackPush = new StringBuilder();
for (int i = 0; i < stack.size(); i++) {
StackPush.append(stack.get(i));
}
System.out.println(StackPush.toString());
}
}
不要分裂。