1

いくつかの数字 (通常は日付) と区切り文字を含む文字列があります。セパレータは「,」または「.」のいずれかです。- または例 01.05,2000.5000

....今、これらの数値を分離して配列に入れる必要がありますが、その方法がわかりません(分離部分)。また、文字列が有効であることを確認する必要があります。01.,05 であってはなりません。

私は誰かに私のために問題を解決するように頼んでいるわけではありません (しかし、誰かが望むなら、私はそれを感謝しています)、ちょうど私を正しい方向に向けてください:)

4

7 に答える 7

1

これを試して:

String str = "01.05,2000.5000";
str = str.replace(".",",");
int number = StringUtils.countMatches(str, ",");
String[] arrayStr = new String[number+1];
arrayStr = str.split(",");

StringUtilsからですApache Commons>> http://commons.apache.org/proper/commons-lang/

于 2013-05-18T01:55:38.363 に答える
1

String#split(regex)生成された配列を反復処理し、各値をチェックして、ソースStringが「有効」であることを確認します。

の:

String src = "01.05,2000.5000";
String[] numbers = src.split("[.,]");

numbersStringsのようなの配列になります{"01", "05", "2000", "5000"}。各値は数値です。

を繰り返しnumbersます。数値ではないインデックス ( is の場合numbers[i].matches("\\d+")は数値true)を見つけた場合、そのインデックスsrcは無効です。

于 2013-05-18T01:41:51.933 に答える
1

検証します:

if (input.matches("^(?!.*[.,]{2})[\\d.,]+))

この正規表現は、次のことを確認します。

  • ドットとコンマが隣接することはありません
  • 入力は数字、ドット、コンマのみで構成されています

分割します:

String[] numbers = input.split("[.,]");
于 2013-05-18T01:45:57.600 に答える
1

これはStringTokenizerクラスでそれを行う方法です。トークンを反復し、取得したトークンが空の場合は無効な文字列になります。また、トークンをparseIntメソッドで整数に変換して、有効な整数かどうかを確認します。

import java.util.*;
public class t {
    public static void main(String... args)  { 
        String line = "01.05,2000.5000";
        StringTokenizer strTok = new StringTokenizer(line, ",.");
        List<Integer> values = new ArrayList<Integer>();
        while (strTok.hasMoreTokens()) {
            String s = strTok.nextToken();
            if (s.length() == 0) { 
                // Found a repeated separator, String is not valid, do something about it
            } 
            try { 
                int value = Integer.parseInt(s, 10);
                values.add(value);
            } catch(NumberFormatException e) { 
                // Number not valid, do something about it or continue the parsing 
            }
        }

        // At the end, get an array from the ArrayList
        Integer[] arrayOfValues = values.toArray(new Integer[values.size()]);

        for (Integer i : arrayOfValues) {
            System.out.println(i);
        }
    }
}
于 2013-05-18T01:46:38.780 に答える
1

正規表現を使用して入力をグループ化し、一致させる

    String s = "01.05,2000.5000";       
    Pattern pattern = Pattern.compile("(\\d{2})[.,](\\d{2})[.,](\\d{4})[.,](\\d{4})");      
    Matcher m = pattern.matcher(s);

    if(m.matches()) {
        String[] matches = { m.group(1),m.group(2), m.group(3),m.group(4) };
        for(String match : matches) {
            System.out.println(match);
        }
    } else {
        System.err.println("Mismatch");
    }
于 2013-05-18T01:48:18.523 に答える
1

可能であれば、そのためにグアバ文字列スプリッターを使用します。よりもはるかに信頼性が高く、予測可能で、柔軟性がありString#splitます。何を期待するか、何を省略するかなどを正確に伝えることができます。

使用例と、愚かな Javasplitが時々どのように動作するかについてのちょっとした暴言については、こちらをご覧ください: http://code.google.com/p/guava-libraries/wiki/StringsExplained#Splitter

于 2013-05-18T01:49:40.100 に答える
0

文字列を区切るにはsplit()を使い、メソッドの引数は区切り文字

array = string.split("セパレータ");

于 2013-05-18T01:24:32.147 に答える