2017-04-24 13 views
-4

は、だから私はこれが私-1Javaの空白(タブ+スペース+など)の最初の出現を見つける方法は?

を与えるこの

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

のようなものを持っているが、私は、\ 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()はの文字または文字列をとります。しかしではないの正規表現。したがって

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

プリント1をindexのタブの文字があるため、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

面白いです。人々は正しかったし、私の最初の間違った答えをdownvoteするのが速かった。それらの投票が戻ってくるかどうかを見てみましょう。 – GhostCat

+0

ありがとうございました。私はその1つも加えました。 – 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';を組み合わせることができます。 – 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()メソッドは、マッチの最初の文字のインデックスを返します。

パターンを1回だけコンパイルできます(定数を作成することもできます)。すべての文字列に対してMatcherを作成するだけです。

+0

"残りの文字列とタブまたはスペースで区切られた文字列の最初の数字が必要です"。 実際には '\\ s \\ d +'のような正規表現を定義することができます –

+0

@Jérômeあなたはコメントを見落としました*文字列はその番号で始まり、数字の終わりの後にスペースまたはタブがあります*。私は今質問にそれを編集しました。 – RealSkeptic

+0

本当に私はそれを逃した。説明のためにThx –

関連する問題