2012-02-07 72 views
-1

我需要实现以下几点:字符串的处理在Java中

“$首选项”字符串中的“什么东西$首选项(东西 东西)”应返回。 $ prefs由字母a-zAz 和数字0-9组成。 “$”总是在那里。

寻找$prefs的开头是没有问题的,但是找到最终的结果会更棘手。如上所述,$prefs也可能是$prefssdf,其次几乎是任何东西,如(,,,&&,什么不是。

有没有办法做这样的事情:

while(string.elementAt(i) == [a-zA-Z0-9]){ 
    result += string.elementAt(i); 
} 

一个例子:

我有以下字符串:

Select * from test where $prefs(select * from test2 where $prefs2); 

我需要提取表达式所有出现的$前缀,所以在这种情况下,它是$prefs$prefs2。我如何最有效地做到这一点?

+1

对不起,但我只是不明白你在问什么。你能更具体并举例吗? – templatetypedef 2012-02-07 22:21:14

+0

你不应该在你的例子中提取'$ prefs'和'$ prefs2'吗? – talnicolas 2012-02-07 22:33:10

+0

你说得对,修好了,谢谢! – deimos1988 2012-02-07 22:41:13

回答

1
if(Character.isDigit(a) || (a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z')) { 
     // a is [a-zA-Z0-9] 
    } 
3

为什么不使用regex

String str = "something something $prefs(something something)"; 
Matcher matcher = Pattern.compile("\\$[a-zA-Z0-9]+").matcher(str); 
if (matcher.find()) { 
    System.out.println(str.substring(matcher.start(),matcher.end())); 
} else { 
    System.out.println("no match"); 
} 

正则表达式走的是一条$签名和字母/数字跟随它。

+0

你可能想用\\ w(一个“单词”字符)代替[a-zA-Z0-9],尽管它也包含下划线字符(但我认为这是对这个用例的一个奖励)。 – 2012-02-07 23:00:09

+0

呵呵,'str.substring(matcher.start(),matcher.end()'当然会和'matcher.group()'一样。 – 2012-02-07 23:02:03

0

你可以看看正则表达式(here)和$匹配允许的字符后,发现部分。

1

这个答案假设这是作业。通常我会推荐在这里使用完整的正则表达式。

所以你有while循环找出哪个是好的。

while (isKeywordCharacter(string.charAt(i))) { 
    //... 
} 

接下来的问题是什么是这个方法的最佳实施:

public boolean isKeywordCharacter(char character) { 
    return //? 
} 

最透明和有效的可能是这样的:

通过提取一个名为“isKeywordCharacter”方法开始
return (character >= 'a' && character <= 'z') || ...; 

鉴于最自我记录可能是这样的:

return String.valueOf(character).matches("[a-zA-Z0-9]");