0
String aStr="TEST-1-TV_50";
System.out.println(aStr.matches("^[A-Z0-9\\-\\_]+")); //TRUE.

しかし、なぜこれが機能しないのですか..?

String aStr1= "$local:TEST12-1-TV_50 as xs:boolean";

int strtIndex=aStr.indexOf(":");
int endIndex=aStr.indexOf("as");

String extractedStr=aStr1.substring(strtIndex+1,endIndex);  //TEST12-1-TV_50


System.out.println(extractedStr.matches("^[A-Z0-9\\-\\_]+")); //FALSE. 

なぜその結果がfalseになるのですか?

4

2 に答える 2

4

の末尾にスペースがありextractedStrます。

したがって、含まれています"TEST12-1-TV_50 "(最後の0の後にスペースがあるわけではありません)。

endIndex(開始スペース)に置き換えるかaStr.indexOf(" as")、単にtrim()on を呼び出すことができますextractedStr:

String extractedStr=aStr1.substring(strtIndex+1,endIndex).trim();
于 2013-10-06T17:50:33.170 に答える
2

文字クラスにもスペースを含める必要があります。

extractedStr.matches("^[A-Z0-9 _-]+"); // true

またはtrim()前に呼び出すmatches

extractedStr.trim().matches("^[A-Z0-9_-]+"); // true

PS:_文字クラスとハイフンもエスケープする必要はありません(開始または終了で使用する場合)

于 2013-10-06T17:52:05.147 に答える