2016-12-11 12 views
0

文字列に「+」などの特殊文字が含まれている場合は、 文字列を基本的に分割し、それに続く文字列を遭遇するまで取得します。別の "+"または " - "記号のような別の特殊文字(これらは私がそれらが欲しいので特殊文字だけであることに留意してください)。2文字の間の文字列の取得

は、だから私は、この文字列を持って言うことができます:

String strng = "hi+hello-bye/34"; 

ので、私はあなたが文字列こんにちはまたはさようなら単独34を返すいくつかの方法には、この問題を解決するために使用し、これまでどのような方法でほしいです。また、文字列の2つの "+"記号が2つの "+"文字の後の最初の文字列を返すようにしたい場合もあります。

ので、このような何か:

strng.split("\\+"); 

ではなく、それが唯一の "hello" を返す "ハローさようなら/ 34" を返します。

答えて

1

ここでは、実際の分割結果にこれらの区切り文字を保持しながら、入力文字列を複数の特殊文字区切り文字に分割するオプションがあります。次に、パーツの配列を反復処理し、関心のある特殊区切り記号の直後に出現する部分を返します。

ここでは、このロジックを実装する簡潔な方法を示します。私は区切り記号のセットが+-*および/であると想定していますが、これはあなたが望むものに簡単に変更できます。

public String findMatch(String input, String delimiter) { 
    String[] parts = input.split("((?<=[+\\-*/])|(?=[+\\-*/]))"); 
    String prev = null; 
    for (String part : parts) { 
     if (delimiter.equals(prev)) { 
      return part; 
     } 
     prev = part; 
    } 

    return null; // default value if no match found 
} 

注:この方法は、分割された入力文字列を反復処理場合nullを返し、特別な区切り文字を見つけることができない、またはおそらくそれを進めない文字列で配列の最後の要素としてそれを見つけます。デフォルトの戻り値を自由に変更することができます。

+0

@EdwinAsoluka特別な入力区切り文字と一致しない場合にのみ 'null'を返します。私のコードを実際にテストしましたか? –

+0

私は問題に遭遇しましたが、これは最初のインスタンスだけを返します。文字列strng = "hi + hello + bye/34"; findMatch(strng、 "+");これは "hello"だけを返します。そして私はforループとcharAt(i)を使ってみましたが、これをやってhelloとbyeの代わりに "hello"を2回返します。 –

+0

@EdwinAsolukaあなたはあなたの要求を明確にしたことはありません。質問をあなたが本当に必要とする行動に更新してください。 –

関連する問題