给出带有单词的字符串。字符串的反向单词。
Hello World
世界你好
MyApproach
要反转单词我首先计算了多少空格。之后我将它们的空间索引存储在一个数组中。使用lastIndex,我打印了数组的最后一个元素。之后我打印了数组的最后两个单词。
static String reverseWords(String inputString)
{
int l1=inputString.length();
int count=1;
for(int i=0;i<l1;i++)
{
char ch=inputString.charAt(i);
if(ch==' ')
{
count++;
}
}
int k=0;
int[] spaceindex=new int[count];
spaceindex[0]=0;
k++;
for(int i=0;i<l1;i++)
{
char ch=inputString.charAt(i);
if(ch==' ')
{
spaceindex[k++]=i+1;
}
}
int p=spaceindex.length-1;
String strnew="";
for(int j=spaceindex[p];j<l1;j++)
{
char c=inputString.charAt(j);
strnew=strnew+c;
}
p--;
while(p>=0)
{
for(int j=spaceindex[p];;j++)
{
char c=inputString.charAt(j);
if(c==' ')
{
break;
}
strnew=strnew+c;
}
}
return strnew;
}
InputParameters ActualOutput Expected Output
Hello World WorldHelloWorldHello(Infinite loop) WorldHello
@Edit我问为什么我写的代码是错的。我试过没有使用任何内置函数(这对我来说是必要的)。这样我认为根据我不是重复的答案。
任何人都可以指导我的代码出了什么问题。
答案 0 :(得分:1)
简单的解决方案:
public static void main(String[] args) {
String x = "Hello World";
String[] xArray = x.split(" ");
String result = "";
for (int i = xArray.length - 1; i >= 0; i--) {
result += xArray[i] + " ";
}
System.out.println(result.trim()); // World Hello
}
答案 1 :(得分:1)
代码中的问题是while循环:
each_with_index.to_a
添加 while(p>=0) {
strnew = strnew + " ";
for(int j=spaceindex[p];;j++) {
char c=inputString.charAt(j);
if(c==' '){
break;
}
strnew=strnew+c;
}
p--;
}
将阻止循环无限发生。同时在while循环之后插入p--
可确保每个单词之间有空格。
答案 2 :(得分:1)
可以不使用其他数组,拆分或任何其他结构。
有字符数组(如果需要转换为String是不可变的),首先反转数组中的所有字符。其次循环空格和单词中的每个单词反向字符。
答案 3 :(得分:1)
您可以使用StringTokenizer将字符串转换为标记或String.split函数。您可以将此集合推入堆栈并以相反的顺序提取元素。要重新连接字符串,可以使用StringBuilder或StringBuffer。
为了更有效地执行此操作,您可以将字符串转换为字符数组和StringBuilders
String myString = "Here is the String";
char[] myChars = myString.toCharArray();
StringBuilder word = new StringBuilder();
StringBuilder newString = new StringBuilder();
for(int i = myChars.length - 1; --i >= 0;) {
char c = myChars[i];
if(c == ' ') {
newString.append(c);
newString.append(word);
word = new StringBuilder();
} else {
word.append(c);
}
}
答案 4 :(得分:1)
我会将实施基于String.lastIndexOf(int)
和String.substring(int, int)
。我得到StringBuilder
来构建输出&#34;句子&#34;和while
loop以相反的顺序迭代单词。像,
static String reverseWords(String in) {
StringBuilder sb = new StringBuilder(in.length());
int space;
while ((space = in.lastIndexOf(' ')) > 0) {
sb.append(in.substring(space + 1, in.length())).append(' ');
in = in.substring(0, space);
}
sb.append(in);
return sb.toString();
}
我使用您提供的样本进行了测试
public static void main(String[] args) {
System.out.println(reverseWords("Hello World"));
}
获得(按预期)
World Hello