2014-10-22 88 views
-2

我有一些代码:需要关于.indexOf();的使用方面的建议。

firstWord = sentance.substring (0, sentance.indexOf(' ')); 
secondWord = sentance.substring(sentance.indexOf(' ') + 1); 

的码用于选择第一字出字符串而不使用阵列。 但是我想知道如果我可以通过实现一个安全措施来进一步防止我的代码,那么如果用户输入两个空格,代码将占用一组空白并将其计为一个单元。

这可能不使用数组或循环?

例如,用户将输入此: “你好2spaces有” 用户不小心输入的两个空间在开始的时候这会搞乱程序直到当它试图把第二个字,我认为。

+2

如果数组和循环是禁忌(为什么?),那么正则表达式呢? – Thilo 2014-10-22 05:06:27

+0

为什么你不想用户数组?你可以有效地使用它 – 2014-10-22 05:10:00

+1

正则表达式很好。这是一项任务,教授不希望我们使用我们还没学过的东西。 – Crouton 2014-10-22 05:10:58

回答

0

您的代码不会采取的第一个单词串出的只有字符串的第一个字符是一个空格,或者第一个空格前是不发一言,或没有空间,例如" hello" -> "", "[email protected]#! blah" -> "[email protected]#!", "asdasd" -> ""

+0

是的,我忘了提到句子只会包含两个单词。 – Crouton 2014-10-22 05:09:48

0

y.indexOf(x)返回y中第一次出现x的索引。

您的解决方案大多是万无一失的,但它会失败,如果有之前的空间,或者没有空格指定字符串中,因为indexOf将返回-1拿到的第一个字。

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

+0

感谢您的建议!我忘了有人在那里添加意外空间。 – Crouton 2014-10-22 05:17:52

0
str = "Hello I'm your String"; 
String[] splited = str.split("\\s+"); 

你可以使用它们并不那么糟糕的数组。

+0

我受到限制,因为这是一项不包括数组使用的任务。 – Crouton 2014-10-22 05:18:49

0

如果你确实必须避免使用一个数组,你可以先使用sentance.replaceAll("\\s+", " ");将连续空白的所有序列折叠成单个空格。

(同样,你想trim()开头和结尾的空白也是如此。)

+0

是的,这是我要做的。谢谢! – Crouton 2014-10-22 05:26:28

0

如果你只是想删除尾随和前导空格使用.trim()

str = str.trim() 
4

单空间删除多个空间:

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

我喜欢这个!太感谢了。 – Crouton 2014-10-22 05:22:27

+0

欢迎您:) – Rustam 2014-10-22 05:24:36

+0

@Crouton这应该是被接受的答案。 – 2014-10-22 07:19:22