-1

マークされている文字列の特別な部分を抽出しようとしています。

String input = "$nick=someone$$message=something$";

次に、この文字列を 2 つの小さい文字列に分割します。

String nick = "someone";
String message = "something";

私は、正規表現とString.replaceFirst()メソッドを使用して何とかそれを行うことができることを知っています。しかし、私はそれがどのように機能するかを本当に理解していません。

4

3 に答える 3

2

Java クラスを使用してPattern、入力を正規表現 (文字列形式) と明示的に一致させることができます"\\$nick=(.+?)\\$\\$message=(.+?)\\$"

public static void main(String[] args) {
    String input = "$nick=someone$$message=something$";
    String nick = null;
    String message = null;

    java.util.regex.Pattern p = java.util.regex.Pattern.compile("\\$nick=(.+?)\\$\\$message=(.+?)\\$");
    java.util.regex.Matcher m = p.matcher(input);
    if (m.find()) {
        nick = m.group(1);
        message = m.group(2);
    }

    System.out.println("Nick: "+nick);
    System.out.println("Message: "+message);
}

出力:

Nick: someone
Message: something

編集:

あなたのコメントから、文字列の形式が固定されていることがわかります。その場合、より簡単なアプローチにString#indexOf()withString#substring()を使用できます。

public static void main(String[] args) {
    String input = "$nick=someone$$message=something$";
    String nick = input.substring(input.indexOf("$nick=")+"$nick=".length(), input.indexOf("$$message="));
    String message = input.substring(input.indexOf("$$message=")+"$$message=".length(),input.length()-1);

    System.out.println("Nick: "+nick);
    System.out.println("Message: "+message);
}
于 2013-06-28T22:53:31.633 に答える
1

次のコードを実行して、入力文字列からデータを抽出する方法を確認します。

    String input = "$nick=someone$$message=something$";
    Pattern pattern = Pattern.compile("\\$([^=]+)=([^\\$]+)\\$");
    Matcher matcher = pattern.matcher(input);
    while (matcher.find()) {
        String key = matcher.group(1);
        String value = matcher.group(2);
        System.out.println(key + " = " + value);
    }
于 2013-06-28T22:53:29.800 に答える
1

これStringにより、入力の前に「=」と「$」で区切られたすべての sが見つかりStringます。

String input = "$nick=someone$$message=something$";
Pattern pattern = Pattern.compile("=(.+?)\\$");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
    System.out.println(matcher.group(1));
}

出力:

someone
something
于 2013-06-28T22:53:07.013 に答える