1

数値の範囲が文字列に存在するかどうかを確認しようとしています これよりもエレガントな方法はありますか?

if (ccnumeric.contains("51")
    || ccnumeric.contains("52")
    || ccnumeric.contains("53")
    || ccnumeric.contains("54")
    || ccnumeric.contains("55"))

文字列の int 範囲をチェックしているので、これを満たす方法は考えられません。

4

4 に答える 4

6

単純な正規表現を使用できます: 5[12345]{1}5 の後に 1、2、3、4 または 5 が 1 つだけ続くものを探します。

String s = "55";
Pattern p = Pattern.compile("5[12345]{1}");
if (p.matcher(s).find()) {
    System.out.println("Found");
} else {
    System.out.println("Not Found");
}
于 2012-08-27T06:59:04.377 に答える
1

たぶん、正規表現を試すことができます。

例えば

Pattern.matches( ".*5[1-5].*", ccnumeric );

編集:文字列内のすべての数字を検索するには:

List<Integer> allMatches = new ArrayList<Integer>();
Matcher m = Pattern.compile("(\\d+)").matcher(ccnumeric);
while (m.find()) {
   allMatches.add(Integer.parse(m.group()));
}
于 2012-08-27T06:58:34.403 に答える
0

たとえば、文字列「541」、1(541)、3(5,4,1)、6(5,4,1,54,41,541) にはいくつの数字がありますか? 正規表現をどのように定義するかによって、かなり変化します。答えが 1 の場合、解決策は非常に単純で、長さが最小値と同じで最大値以下のすべての数値を貪欲に検索します (その後、一致を解析し、最小値と最大値に基づいてフィルター処理できます)。 ...他のものの1つである場合、ソリューションはもう少し複雑になります。基本的に、スライディングウィンドウを作成して、文字列内の可能なすべての組み合わせを評価する必要があります。

于 2012-08-27T07:11:37.937 に答える
0

あなたの質問はあいまいに表現されていると思います...入力文字列に51〜55の範囲内の数字が含まれているかどうかを確認したいですか?(あなたの文章はこれを暗示しているようです) この場合、文字列 "512 is a power of two" は数字の 51 を含まないため一致しません。

または、文字列に 51、52、53、54、または 55 の文字列が含まれていることを確認しますか? (あなたのコードはこれを暗示しているようです)この場合、文字列「512 is a power of two」は文字列 51 を含んでいるため、一致します。

最初のオプションが当てはまる場合は、次のようなものが必要です。

Pattern p = Pattern.compile("(^|[^\\d])5[1-5]($|[^\\d])");
if (p.matcher(inputString).find()) {
    //The inputString contains the number you seek
}

基本的に、これが行っていることは探していることです

  • 文字シーケンス 51-55
  • 文字列の先頭または数字以外の文字が前にある
  • 文字列の末尾または数字以外の文字が続く
于 2012-08-27T08:43:56.723 に答える