2017-04-24 90 views
-4

所以我有這樣的事情如何在java中查找空白(tab +空格+等)的第一次發生?

System.out.println(some_string.indexOf("\\s+")); 

這給了我-1

但是當我像\ T或空間

System.out.println(some_string.indexOf("\t")); 

特定值做我得到正確的索引。

有沒有什麼辦法可以在不使用split的情況下得到第一次出現空白的索引,因爲我的字符串很長。

PS - 如果有幫助,這是我的要求。我想要的字符串中的第一個數字與字符串的其餘部分由製表符或空格分開,我試圖避免分割(「\\ s +」)[0]。該字符串以該數字開始,並且在數字結束後具有空格或製表符

+5

'indexOf' [不](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(java.lang.String))帶一個正則表達式作爲參數 –

+0

數字 - 在左邊還是在右邊分開? – RealSkeptic

+0

字符串以該數字開頭,數字結尾後有空格或製表符 – Humus

回答

1

關鍵是:indexOf()採用char或字符串;但是不是的正則表達式。

因此:

String input = "a\tb"; 
System.out.println(input); 
System.out.println(input.indexOf('\t')); 

打印1因爲在索引一個TAB字符1.

打印-1,因爲在你的輸入值沒有子\\s+

換句話說:如果你想使用正則表達式的冪,你不能使用indexOf()。例如,您會比較偏向String.match()。但是,當然 - 這會給出一個布爾結果;不是索引。

如果您打算找到第一個空格,您必須手動迭代字符,像索引:這種

for (int index = 0; index < input.length(); input++) { 
    if (Character.isWhitespace(input.charAt(index)) { 
    return index; 
    } 
} 
return -1; 
+0

有趣。人們正確和迅速地降低了我最初錯誤的答案。讓我們看看這些選票是否會回來。 – GhostCat

+0

非常感謝。我還說了一件事。 – GhostCat

+0

在性能方面,使用indexOf('')'和'indexOf('\ t')'並不會那麼糟糕。它不太詳細 –

3

東西可以幫助?雖然有更好的方法來做到這一點。

class Sample{ 
public static void main(String[] args) { 
    String s = "1110 001"; 
    int index = -1; 
    for(int i = 0; i < s.length(); i++){ 
     if(Character.isWhitespace(s.charAt(i))){ 
      index = i; 
      break; 
     } 
    } 

    System.out.println("Required Index : " + index); 
} 
} 
+0

是的,這會有所幫助,但它似乎是一個過度衝擊 – Humus

+0

讓我找到出於任何其他方式來滿足您的需求:-) –

+1

Aritra,您可以將Java 8流(這裏是'IntStream')和'indexOf'; P。 – Tom

2

那麼,要找到一個正則表達式,你需要使用正則表達式類。

Pattern pat = Pattern.compile("\\s"); 
Matcher m = pat.matcher(s); 
if (m.find()) { 
    System.out.println("Found \\s at " + m.start()); 
} 

Matcher類的find方法定位爲其創建匹配器串中的圖案。如果成功,start()方法會爲您提供匹配的第一個字符的索引。

請注意,您只能編譯一次模式(甚至創建一個常量)。你只需要爲每個字符串創建一個Matcher

+0

「我希望字符串中的第一個數字通過製表符或空格與字符串的其餘部分分離」。 所以實際上你可以像'\\ s \\ d +' –

+0

@Jérôme一樣定義正則表達式您錯過了評論*字符串以該數字開頭,並在數字結束後有一個空格或製表符*。我現在已將它編輯成問題。 – RealSkeptic

+0

真的,我錯過了它。 Thx澄清 –