我想使用递归来分割字符串。我使用sting asd>=123
来测试
在第一个,它成功,但在第二个,它进入其他条件。
s
可能是“123> = asd;”,“123 + 456”,“654 * 123”
boolean SplitString( String s ) {
if ( s.matches("^\\d+.*") ) { // number
parser.Add( s.substring( 0, subindex ) );
if ( subindex == s.length() )
return true;
returnType = SplitString( s.substring( subindex, s.length() ) );
return returnType;
} // if
else if ( s.matches( "^(<|>|<>|:=|=|;|<=|>=|\\+|-|\\*|/.)*" ) ) { // operator
subindex = SplitSign( s );
parser.Add( s.substring( 0, subindex ) );
if ( subindex == s.length() )
return true;
returnType = SplitString( s.substring( subindex, s.length() ) );
return returnType;
} // else if
else if ( s.matches( "^_?\\w+.*" ) ) { // variable
for ( int i = 0 ; i < s.length() ; i++ ) {
if ( !Character.isAlphabetic( s.charAt( i ) ) && !Character.isDigit( s.charAt( i ) ) && s.charAt( i ) != '_' ) {
subindex = i;
i = s.length(); // break loop
} // if
} // for
parser.Add( s.substring( 0, subindex ) );
if ( subindex == s.length() )
return true;
returnType = SplitString( s.substring( subindex, s.length() ) );
return returnType;
} // else if
else { // not above
return false;
} // else
} // SprlitString()
但它没有用。我错过了什么?
答案 0 :(得分:0)
你的正则表达式减少到(?:[-*+;=<>]|:=|/.)*
,但我相信
matches
方法必须与整个字符串匹配。
这意味着起始锚点和结束锚点是隐式的,可以排除。
所以,除非你的字符串是空的或者完全 那些字符
我不相信它会匹配。