Scanner オブジェクトを使用してテキストをスキャンしていますlineScanner
。宣言は次のとおりです。
String myText= "200,00/100,00/28/65.36/21/458,696/25.125/4.23/6.3/4,2/659845/4524/456,65/45/23.495.254,3";
Scanner lineScanner = new Scanner(myText);
それでScanner
、最初の を見つけたいと思いますBigDecimal
。BIG_DECIMAL_PATTERN
任意のケースに一致するa を宣言しました。
私が定義したルールは次のとおりです。
- 千の区切り記号の後には常に正確に 3 桁の数字が続きます
- 小数点以下は常に正確に 1 桁または 2 桁です。
- 桁区切り記号がコンマ記号の場合、小数点はドット記号になり、逆に
- 数値の小数部分として、3 桁区切り記号はオプションです
String nextBigDecimal = lineScanner.findInLine(BIG_DECIMAL_PATTERN);
さて、ここにBIG_DECIMAL_PATTERN
私が宣言したものがあります:
private final String BIG_DECIMAL_PATTERN=
"\\d+(\\054\\d{3}+)?(\\056\\d{1,2}+)?|\\d+(\\056\\d{3}+)?(\\054\\d{1,2}+)?)";
\\054
の ASCII 8 進数表現です。","
\\056
の ASCII 8 進数表現です。"."
私の問題は、最初の部分のパターンが見つかったときに、2 番目の部分 ( の後|
) がチェックされず、私の例では最初の一致が200
and ではないため、うまく機能しないこと200,00
です。だから私はこれを試すことができます:
private final String BIG_DECIMAL_PATTERN=\\d+([.,]\\d{3}+)?([,.]\\d{1,2}+)?
しかし、新しい問題があります。コンマとドットは排他的ではありません。つまり、一方が千単位の区切り記号である場合、小数点はもう一方でなければならないということです。
助けてくれてありがとう。