2

のような長い文字列を持っています"abc_12.23;dcf_23.99;dfa_12.99;

ここで、浮動小数点数と文字列値をそれぞれ浮動小数点数と文字列配列に分離する を作成する必要があります。

「;」で分割してみました それを配列に取り、「_」で分割して配列に抽出しました。しかし、それは機能していませんでした。誰でもこれについて私を助けることができますか??

4

5 に答える 5

2

おそらく、StringTokenizer を使用すると、もう少し効率的かもしれません

    StringTokenizer st = new StringTokenizer("abc_12.23;dcf_23.99;dfa_12.99", "_;");
    int n = st.countTokens();
    String[] sa = new String[n / 2];
    float[] fa = new float[n / 2];
    for(int i = 0 ; st.hasMoreTokens(); i++) {
        sa[i] = st.nextToken();
        fa[i] = Float.parseFloat(st.nextToken());
    }
于 2013-02-19T14:12:14.433 に答える
0

スキャナーを使用する場合があります。次のようになります。

scanner = Scanner("abc_12.23;dcf_23.99;dfa_12.99;");
scanner.useDelimiter("[;_]");
while(scanner.hasNext()){
  String s = scanner.next();
  float f = scanner.nextFloat();
}
于 2013-02-19T14:17:27.043 に答える
0

あなたの解決策は良いです。

次のアプローチにより、パフォーマンスが少し向上します。

  • すべての文字を文字列に繰り返します。
  • 「_」や「;」を見つけたとき 最後の同じ文字から部分文字列をコピーし (現在の ; 解析された文字列が float の場合、解析された文字列よりも _ _ なります)、適切な配列にプッシュします。

パフォーマンスが大幅に向上するかどうかはわかりません。

注:私はJavaプロではありませんが、Javaが「;」で分割された複数の文字でこぼれることを許可する場合 と "_" を使用し、浮動小数点数には奇数インデックスを使用し、文字列には奇数インデックスを使用しません。

于 2013-02-19T14:07:23.833 に答える
0

正規表現のソリューションは次のとおりです。

    String input = "abc_12.23;dcf_23.99;dfa_12.99; and so on";
    String regex = "([a-zA-Z]+)_(\\d+(\\.\\d+)?);?";
    List<String> strings = new ArrayList<>();
    List<Double> floats = new ArrayList<>();
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(input);
    while (matcher.find()) {
        strings.add(matcher.group(1));
        floats.add(Double.valueOf(matcher.group(2)));
    }
    System.out.println(strings); // prints [abc, dcf, dfa]
    System.out.println(floats); // prints [12.23, 23.99, 12.99]
于 2013-02-19T14:14:05.193 に答える
0

次の正規表現を試してください。

(\w.)_(\d.\.\d.);

ここでテストする 正規表現テスト アプレット

matcher.find()一致をステップ実行するために使用します。

グループ 3 (インデックス 2) には float 値が含まれます。

于 2013-02-19T14:15:20.403 に答える