为啥有些单词没有被检查或包含在反向单词字符串中?
Posted
技术标签:
【中文标题】为啥有些单词没有被检查或包含在反向单词字符串中?【英文标题】:why are some words not checked or included in string of reversed words?为什么有些单词没有被检查或包含在反向单词字符串中? 【发布时间】:2022-01-07 16:45:21 【问题描述】:每个人。我有一个任务 - 只要单词长度为 5 个或更多字母,就反转句子中的每个单词。该程序一直在处理大多数单词,但在几次之后,这些单词不包括在内。有谁知道为什么会这样?代码如下:
public static int wordCount(String str)
int count = 0;
for(int i = 0; i < str.length(); i++) if(str.charAt(i) == ' ') count++;
return count + 1;
这只是为我计算字数,我稍后会在 for 循环中使用它来循环所有单词。
public static String reverseString(String s)
Stack<Character> stack = new Stack<>();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++)
stack.push(s.charAt(i));
while (!stack.empty())
sb.append(stack.pop());
return sb.toString();
这会反转单个字符串。这不是我颠倒某些单词的地方——这会颠倒一个字符串。从https://***.com/a/33458528/16818831“借来的”。
最后,实际功能:
public static String spinWords(String sentence)
String ans = "";
for(int i = 0; i <= wordCount(sentence); i++)
if(sentence.substring(0, sentence.indexOf(' ')).length() >= 5)
ans += reverseString(sentence.substring(0, sentence.indexOf(' '))) + " ";
sentence = sentence.substring(sentence.indexOf(' ') + 1);
else
ans += sentence.substring(0, sentence.indexOf(' ')) + " ";
sentence = sentence.substring(sentence.indexOf(' ') + 1);
return ans;
这可能是我的错误所在。我想知道为什么有些词被省略了。以防万一,这是我的主要方法:
public static void main(String[] args)
System.out.println(spinWords("Why, hello there!"));
System.out.println(spinWords("The weather is mighty fine today!"));
让我知道为什么会发生这种情况。谢谢!
【问题讨论】:
你尝试调试了吗? @shmosel 抱歉,我没有说明到目前为止我为解决此问题所做的工作。我在 spinWords 函数中更改了 for 循环中的条件,我试图查看是否有任何双簧管,一堆东西。很多这样的“解决方案”只是让输出进一步离题。 您能否确认Why, hello there!
的预期输出是Why, olleh !ereht
如果你使用"Why, hello there!".split (" ");
,你的代码也会简单很多
把 wordCount(sentence) 作为一个单独的变量
【参考方案1】:
我认为您应该使用String.split() 重写很多代码。无需手动解析每个字母,您只需编写 String[] arr = sentence.split(" ") 即可获得每个单词的数组。然后,您可以使用 for 循环遍历并反转每个单词,如下所示
for (int i=0; i<arr.length; i++)
if (arr[i] >= 5)
arr[i] = reverse(arr[i])
我知道您只是要求解决当前代码的问题,但这可能会让您获得更好的成绩 :)
【讨论】:
非常感谢 :D 这不是学校作业,但谢谢你的想法!arr[i] >= 5
- 什么?
我认为他的意思是 arr[i].length()。【参考方案2】:
主要问题似乎是 spinWords() 中的 for 循环条件
你句子的字数越来越短,同时 i 越来越多。
例如:
字数为5时i为0 字数为4时i为1 字数为3时i为2 当字数为 2 时 i 为 3 停止循环。无法贯穿整个句子。
正如许多人所提到的,使用拆分方法会有很大帮助,例如:
public static String spinWords(String sentence)
StringJoiner ans = new StringJoiner(" ");
List<String> words = Arrays.asList(sentence.split(" "));
words.forEach(word -> ans.add(word.length() < 5 ? word : new StringBuilder(word).reverse().toString()));
return ans.toString();
【讨论】:
以上是关于为啥有些单词没有被检查或包含在反向单词字符串中?的主要内容,如果未能解决你的问题,请参考以下文章
Javascript/jQuery 检查字符串是不是包含一个单词或出现的可选单词之一
用于检查字符串是不是不应包含某些单词的正则表达式,但如果这些单词前面有“to”或“for”,则这些单词是可以的
2021-10-15:单词拆分。给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你