ここにJava初心者。
文字列が与えられたとしましょう:
===この銳はa=stri=ng身===
パターンマッチングを使用して、「この銳is a = stri = ng身」の端にある「=」記号の数を効率的に把握するにはどうすればよいですか?
また、\ GなどのJavaエスケープシーケンスを使用しようとしていますが、コンパイルされないようです。
ここにJava初心者。
文字列が与えられたとしましょう:
===この銳はa=stri=ng身===
パターンマッチングを使用して、「この銳is a = stri = ng身」の端にある「=」記号の数を効率的に把握するにはどうすればよいですか?
また、\ GなどのJavaエスケープシーケンスを使用しようとしていますが、コンパイルされないようです。
私は個人的にこれに正規表現を使用しないでしょうが...これはうまくいくものです:
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++;
}
エッジでの「=」の出現回数をカウントしたい場合は、これを試してください。
int count = str.length() - str.replaceAll("[^=]=[^=]", "").length();
次のコードを使用します
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);
=
エッジでバランスが取れている場合は、
^(=+).*\1$
Group1の長さは=
、エッジでの長さです
これは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);
}
=
これは、文字列の端にある番号を見つけるのに役立ちます。
=
開始時と終了時の数が常に同じであると仮定します。
import java.util.regex.*;
Matcher m = Pattern.compile("^=*").matcher(s);
int count = m.find()? m.group(0).length(): 0;