2

文字列の最初のスペース文字を、以下にリストされている別の文字列に置き換えたいです。単語には多くのスペースが含まれる場合がありますが、最初のスペースのみを置き換える必要があります。以下の正規表現を試しましたが、うまくいきませんでした...

Pattern inputSpace = Pattern.compile("^\\s", Pattern.MULTILINE);  
String spaceText = "This split ";    
System.out.println(inputSpace.matcher(spaceText).replaceAll(" "));

編集::私が使用しているのは外部APIであり、「replaceAll」のみを使用できるという制約があります..

4

5 に答える 5

7

文字列の先頭と空白の間の文字が考慮されていないため、コードは機能しません。

コードを次のように変更します。

Pattern inputSpace = Pattern.compile("^([^\\s]*)\\s", Pattern.MULTILINE);  
String spaceText = "This split ";    
System.out.println(inputSpace.matcher(spaceText).replaceAll("$1 "));

説明:

[^...]\\sは、指定された文字または文字クラス (は文字クラス)に一致しない文字に一致します。

したがって、[^\\s]*0 個以上の非空白文字です。以下は で囲まれ()ています。

$1で最初に登場するものです()

Java 正規表現リファレンス.

ただし、推奨される方法は :を使用することreplaceFirstです (ただし、これは要件に準拠していないようです)。

String spaceText = "This split ";
spaceText = spaceText.replaceFirst("\\s", " ");
于 2013-07-15T15:37:49.497 に答える
5

メソッドを使用してString.replaceFirst()、パターンの最初の出現を置き換えることができます

System.out.println(" all test".replaceFirst("\\s", "test"));

そしてString.replaceFirst()内部的に呼び出すMatcher.replaceFirst()ので、

Pattern inputSpace = Pattern.compile("\\s", Pattern.MULTILINE);  
String spaceText = "This split ";    
System.out.println(inputSpace.matcher(spaceText).replaceFirst(" "));
于 2013-07-15T15:37:52.147 に答える
1

2 つの手順で行います。

  1. indexOf(" ") は、インデックスがどこにあるかを教えてくれます
  2. 結果 = str.substring(0, index) + str.substring(index+1, str.length())

アイデアはこれです.APIに従って適切にインデックス値を調整する必要があるかもしれません.

2倍のarraycopyがあり、パターンマッチングなどをテキストコンパイルする必要がないため、正規表現よりも高速になるはずです。

于 2013-07-15T15:38:41.563 に答える