0

文字列変数があります。文字列変数の内容を 2 つの部分に分割し、それらを 2 つの異なる文字列変数に保存する必要があります。すでに一部を抽出しましたが、他の部分を抽出できません。

これはコードです:

String set_id="(1) Speed Test 150(min) Demo 1";
set_id = set_id.substring(set_id.indexOf("(") + 1);
set_id = set_id.substring(0, set_id.indexOf(")"));

上記のコードは、 set_id変数に保存されている数字の1を抽出しました。

ここで、Speed Test 150(min) Demo 1を変数から抽出し、 set_nameという名前の変数に保存します。

変数の内容の形式は常に同じままですが、数字と名前自体は異なる場合があります。

文字列のさまざまな部分を抽出するにはどうすればよいですか?

4

7 に答える 7

2

最初の部分文字列を取得するときに、元の文字列を上書きしています。各部分文字列を新しい変数に保存します。

String set_id="(1) Speed Test 150(min) Demo 1";
String part1 = set_id.substring(set_id.indexOf("(") + 1);
part1 = part1.substring(0, part1.indexOf(")"));
String part2 = set_id.substring(set_id.indexOf(")")+2);
于 2013-03-15T05:02:59.690 に答える
1

次のことを試してください。

\\((\d+)\\)\s*(.+)

$1IDと$2名前を指定します。

ここ、

\\(\\)開き括弧と閉じ括弧を一致させます。(エスケープされ()特別な意味があります)

(\d+)1つ以上の数字に一致します(これを参照するために$ 1を使用できるようにキャプチャされています)

\s*0個以上のスペースに一致します

(.+)1つ以上の(任意の)文字に一致します(再度キャプチャされます)

次のように使用します

String string = "(1) Speed Test 150(min) Demo 1";
id = string.replaceAll("\\((\d+)\\)\s*(.+)","$1");
name = string.replaceAll("\\((\d+)\\)\s*(.+)","$2");
于 2013-03-15T05:17:28.950 に答える
0

形式が同じであると仮定します。

set_id.substring(set_id.indexOf(")")+2);

于 2013-03-15T05:02:20.420 に答える
0

正規表現を使用して変数を抽出できます。以下はサンプル コードです。

  Pattern pattern = Pattern.compile("(\\d+).+?(\\d+)\\(");
    String sample = "(1) Speed Test 150(min) Demo 1";
    Matcher matcher = pattern.matcher(sample);
    if(matcher.find()){
        System.out.println(matcher.group(1));
        System.out.println(matcher.group(2));
    }
于 2013-03-15T05:21:12.323 に答える
0

これを確認してください...より優れた効率的なREGEXを使用できます...

    Pattern pattern = Pattern.compile("\\((\\d{0,1})\\)(.*$)");
    String string = "(1) Speed Test 150(min) Demo 1";
    Matcher matcher = pattern.matcher(string);
    if (matcher.matches()) {
        System.out.println("Total matches: " + matcher.groupCount());
        for(int i=1, max=matcher.groupCount(); i<=max; i++ ) {
            System.out.println(i + " : " + matcher.group(i));
        }
    } else {
        System.out.println("No match");
    }
于 2013-03-15T05:15:03.803 に答える
0

末尾の文字を知るために "]" を追加しました。

String set_id="(1) Speed Test 150(min) Demo 1]";
        String set_name=set_id.subSequence(set_id.indexOf(')')+1, set_id.indexOf(']')).toString();
        System.out.println(set_name);

今は私のために働いています。

O/P:-- 速度テスト 150(分) デモ

于 2013-03-15T05:15:15.977 に答える
0

これを試すことができます:

public class RegexTest {

    public static void main(String[] args) {

        String originalString = "(1) Speed Test 150(min) Demo 1";
        String setId = originalString.replaceAll("\\((\\d+)\\)\\s*(.+)", "$1").trim();
        String setName = originalString.replaceAll("\\((\\d+)\\)\\s*(.+)", "$2").trim();
        System.out.println("setId: " + setId);
        System.out.println("setName: " + setName);

    }
}
于 2013-03-15T05:23:35.113 に答える