Java 需要关于.indexOf()用法的建议;

Java 需要关于.indexOf()用法的建议;,java,Java,我有一些代码: firstWord = sentance.substring (0, sentance.indexOf(' ')); secondWord = sentance.substring(sentance.indexOf(' ') + 1); 该代码用于在不使用数组的情况下从字符串中选择第一个单词。 然而,我想知道我是否可以通过实现一个保护措施来进一步证明我的代码,这样,如果用户输入两个空格,代码将把这组空格作为一个单元来计算 如果不使用数组或循环,这是可能的吗 例如,用户将输入以下

我有一些代码:

firstWord = sentance.substring (0, sentance.indexOf(' '));
secondWord = sentance.substring(sentance.indexOf(' ') + 1);
该代码用于在不使用数组的情况下从字符串中选择第一个单词。 然而,我想知道我是否可以通过实现一个保护措施来进一步证明我的代码,这样,如果用户输入两个空格,代码将把这组空格作为一个单元来计算

如果不使用数组或循环,这是可能的吗

例如,用户将输入以下内容: “你好,我在那儿”
用户在开始时意外地输入了两个空格,这会在程序尝试提取第二个单词时弄乱程序。

只有当字符串的第一个字符是空格,或者第一个空格之前不是单词,或者没有空格时,您的代码才不会从字符串中提取第一个单词,例如
“hello”->”,"!@#! 诸如此类的“->”!#!“,”asdasd“->”
y.indexOf(x)
返回
y
中第一次出现的
x
的索引

您的解决方案基本上是万无一失的,但是如果前面有空格,或者指定的字符串中没有空格,它将无法获取第一个单词,因为
indexOf
将返回
-1

您应该对要获取第一个单词的字符串对象调用
.trim()
方法,它将删除字符串周围的空白,然后在字符串末尾添加一个空格字符

str = "Hello I'm your String";
String[] splited = str.split("\\s+");
你可以使用数组,它们并没有那么糟糕。

如果你真的必须避免使用数组,你可以使用
sentance.replaceAll(“\\s+”,”);
首先将所有连续的空格序列折叠成单个空格


(类似地,您还需要
trim()
前导和前导空格。)

如果您只想删除前导和后导空格,请使用
.trim()


使用单个空间删除多个空间,如下所示:

String str="Hello                  world this         is   string";
str=str.replaceAll("\\s+", " ");
.......// do whatever you want

如果数组和循环是禁忌的(为什么?),那么正则表达式呢?你为什么不想使用数组?你可以有效地使用它正则表达式很好。这是一个作业,教授不想让我们使用我们“没有”的东西“学过了。谁在循环和数组之前学过正则表达式?是的,我忘了提到这个句子只包含两个单词。谢谢你的建议!”!我忘了有人在上面添加意外空格。我受到限制,因为这是一项不包括数组使用的任务。我喜欢这样!非常感谢。@Crouton这应该是可以接受的答案。是的,这就是我要做的。谢谢
String str="Hello                  world this         is   string";
str=str.replaceAll("\\s+", " ");
.......// do whatever you want