2014-10-22 85 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