2014-02-05 201 views
18

我知道必须有一个更简单的方法来检查,但这是我现在正在做的。如何检查某个位置的字符串是否包含字符a-h?

if (g.charAt(0) == 'a' || g.charAt(0) =='b' || g.charAt(0) =='c' || 
    g.charAt(0) == 'd' || g.charAt(0) =='e' || g.charAt(0) =='f' || 
    g.charAt(0) == 'g' || g.charAt(0) =='h') 
+1

您可以将'g.charAt(0)'赋值给一个变量,以至少缩短它。 – csmckelvey

+0

请记住,这些字母只是十进制的值:a = 97,b = 104。因此,您还可以检查g.CharAt(0)是否相等或在97和104之间。 – chwi

回答

38

上的字符顺序和a..h is a consecutive range依托:

char firstChar = g.charAt(0); 
if (firstChar >= 'a' && firstChar <= 'h') { 
    // .. 
} 
+0

Not'&&'it should be ''||。 –

+2

@tintinmj不在这种情况下,这是范围检查“之间a和h,包容性”。切换到“||”而不应用DM会匹配所有内容:) – user2864740

+0

nope it ok !!!! –

31

对此使用正则表达式。将字符串的第一个字符作为子字符串剪切,并与其匹配。

if(g.substring(0, 1).matches("[a-h]") { 
    // logic 
} 
4

做的另一种方式:

if(Array.asList("abcdefgh".toCharArray()).contains(g.charAt(0))) 
{ 
    //Logic 
} 
+2

由于'Set'对'contains'(基于散列)有一个固定的时间访问权限,所以我更喜欢'Set'到'List'。 – Makoto

+0

@Makoto True,但如何将'String'转换为'Set'而不将其转换为'List'?我相信我们需要写我们自己的方法来做到这一点。 – hemanth

+1

我要说的是,你错过了最后一步 - 将它转换为'Set'会使它的性能稍微好一些。但是,接下来,你会遇到实际需要做的工作量的问题,这些工作相当微不足道,而且根本不是一个大数据集。或者,你可以用Guava做一些事情,并使用'Sets.newHashSet('a','b','c','d','e','f','g','h')。contains g.charAt(0))'。 – Makoto

7

上hemanth的答案的变化:

if("abcdefgh".contains(g.substring(0,1))) do_something(); 

if("abcdefgh".indexOf(g.charAt(0)) >= 0) do_something(); 
+0

I挖掘它 - 看起来简洁明了。 – user2864740

相关问题