[英]Regular Expression Parse Double
我是新來的正則表達式。 我想搜索NUMBER(19, 4)
19,4
),該方法應返回值(在本例中為19,4
)。 但是我總是得到0
!
int length =0;
length = patternLength(datatype,"^NUMBER\\((\\d+)\\,\\s*\\)$","NUMBER");
private static double patternLengthD(String datatype, String patternString, String startsWith) {
double length=0;
if (datatype.startsWith(startsWith)) {
Pattern patternA = Pattern.compile(patternString);
Matcher matcherA = patternA.matcher(datatype);
if (matcherA.find()) {
length = Double.parseDouble(matcherA.group(1));
}
}
return length;
}
您缺少逗號后的數字匹配。
你也不必逃避,
。 用這個:
"^NUMBER\\((\\d+),\\s*(\\d+)\\)$"
這將為您提供group(1)
的第一個數字和group(2)
的第二個數字。
但是,它對空格非常嚴格,因此您可以使用以下方法來寬大一些,並匹配" NUMBER ( 19 , 4 ) "
這樣的值:
"^\\s*NUMBER\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$"
在這種情況下,您將必須刪除startsWith
並直接使用正則表達式。 另外,如果將find()
更改為matchs(),則可以刪除錨點( ^$
matches()
。
由於通常也允許NUMBER(19)
。 您可以將第二個值設為可選:
"\\s*NUMBER\\s*\\(\\s*(\\d+)\\s*(?:,\\s*(\\d+)\\s*)?\\)\\s*"
如果未提供第二個數字,則group(2)
將返回null
。
請注意,您的代碼無法編譯。
您的方法返回一個double
,但是length
是一個int
。
盡管19,4
看起來像一個浮點數,但實際上不是,並且如此表示是錯誤的。
您應該分別存儲兩個值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.