10進数に影響を与えずに文字列からピリオドを削除し、それらを個別のトークンとして保存するための正規表現を知りたい
str = "..A 546.88 end."
上記の文字列値では、値「546.88」、「A」、「end」のみが必要であり、それらを配列に格納します
手伝ってくれてありがとう
最も一般的なものは次のとおりです。
[0-9]+(\.[0-9][0-9]?)?
私はあなたのコメントであなたが求めることをするために小さなサンプルを作成しました:
私が欲しいのは、可能であれば「A」、「546.88」、「end」を含む配列です
public class JavaApplication39 {
static String str = "..A 546.88 end.";
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// Create a pattern to match breaks
Pattern p = Pattern.compile("[0-9]+(\\.[0-9][0-9]?)?");
// Split input with the pattern
String[] result = p.split(str);
Matcher m = p.matcher(str);
ArrayList<String> strings = new ArrayList<>();
while (m.find()) {//all those that match
strings.add(m.group());
//System.out.println(m.group());
}
for (int i = 0; i < result.length; i++) {//all those that dont match
strings.add(result[i].replaceAll("\\.", "").trim());//strip '.' and ' '
// System.out.println(result[i]);
}
//all contents in array
for (Iterator<String> it = strings.iterator(); it.hasNext();) {
String string = it.next();
System.out.println(string);
}
}
}
2つの質問があるようです。1つ目は、10進数の一部ではないすべてのピリオドを削除することです。これは、次の正規表現から2つのグループを保持することで実行できます。
"(.*(\\D|^))\\.+((\\D|$).*)"
この正規表現は次のとおりです。何でも-数字でも行頭でもない-ピリオド-数字でも行末でもない-何でも
String s = "..A 546.88 .end.";
Pattern p = Pattern.compile("(.*(\\D|^))\\.+((\\D|$).*)");
Matcher m = p.matcher(s);
while(m.matches())
{
s = m.group(1) + "" + m.group(3);
System.out.println(s);
m = p.matcher(s);
}
与える
A 546.88 end
2番目の問題は、残りの文字列から3つの値を取得することです。これには、使用するだけですmyString.split("\\s+")
。これにより、配列内の3つの値が得られます。
String[] myArray = s.split("\\s+");