1

ここにJava初心者。

文字列が与えられたとしましょう:

===この銳はa=stri=ng身===

パターンマッチングを使用して、「この銳is a = stri = ng身」の端にある「=」記号の数を効率的に把握するにはどうすればよいですか?

また、\ GなどのJavaエスケープシーケンスを使用しようとしていますが、コンパイルされないようです。

4

6 に答える 6

3

私は個人的にこれに正規表現を使用しないでしょうが...これはうまくいくものです:

Matcher m = Pattern.compile("^(=+).+[^=](=+)$").matcher("===Som=e=Text====");
m.find();
int count = m.group(1).length() + m.group(2).length();
System.out.println(count);

(これはエラーチェックを行っておらず=、両端にあると想定していることに注意してください)

編集して追加:そして=、どちらかの端にあるかどうかに関係なく機能するものは次のとおりです。

public static int equalsCount(String source)
{
    int count = 0;
    Matcher m = Pattern.compile("^(=+)?.+[^=](=+)?$").matcher(source);
    if (m.find())
    {
        count += m.group(1) == null ? 0 : m.group(1).length();
        count += m.group(2) == null ? 0 : m.group(2).length();
    }

    return count;
}

public static void main(String[] args)
{
    System.out.println(equalsCount("===Some=tex=t="));
    System.out.println(equalsCount("===Some=tex=t"));
    System.out.println(equalsCount("Some=tex=t="));
    System.out.println(equalsCount("Some=tex=t"));
}

一方、...正規表現を回避して次のことを行うことができます。

String myString = "==blah=";
int count = 0;
int i = 0;
while (myString.charAt(i++) == '=')
{
    count++;    
}
i = myString.length() - 1;
while (myString.charAt(i--) == '=')
{
    count++;
}
于 2013-02-15T05:22:34.097 に答える
1

エッジでの「=」の出現回数をカウントしたい場合は、これを試してください。

int count = str.length() - str.replaceAll("[^=]=[^=]", "").length();
于 2013-02-15T05:04:21.340 に答える
0

次のコードを使用します

    String s1 = "===This 銳is a= stri = ng身===";
    System.out.println("Length : "+s1.length());
    p = Pattern.compile("^=+");

    m = p.matcher(s1);
    int count = 0;
    while (m.find())
    {
        count = m.group().length();
        System.out.println("Group : "+m.group());
    }


    p = Pattern.compile("(=+)$");
    m = p.matcher(s1);
    while (m.find())
    {
        count += m.group().length();
        System.out.println("End Group : "+m.group());
    }

    System.out.println("Total : " + count);
于 2013-02-15T05:40:10.777 に答える
0

=エッジでバランスが取れている場合は、

^(=+).*\1$

Group1の長さは=、エッジでの長さです

于 2013-02-15T05:42:39.183 に答える
0

これは1つの考えられる答えである可能性があります。

public static void main(String[] args) {
    int count = 0;
    String str = "===This is a= stri = ng===";
    Pattern edgeEq = Pattern.compile("=");
    Pattern wordEq = Pattern.compile("[^=]=+[^=]");

    Matcher edgeMatch = edgeEq.matcher(str);
    while (edgeMatch.find()) {
        count++;
    }

    Matcher wordMatch = wordEq.matcher(str);
    while (wordMatch.find()) {
        count--;
    }

    System.out.println(count);
}

=これは、文字列の端にある番号を見つけるのに役立ちます。

于 2013-02-15T05:07:13.637 に答える
0

=開始時と終了時の数が常に同じであると仮定します。

import java.util.regex.*;
Matcher m = Pattern.compile("^=*").matcher(s);
int count = m.find()? m.group(0).length(): 0;
于 2013-02-15T05:13:30.520 に答える