我知道必须有一个更简单的方法来检查,但这是我现在正在做的。如何检查某个位置的字符串是否包含字符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')
我知道必须有一个更简单的方法来检查,但这是我现在正在做的。如何检查某个位置的字符串是否包含字符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')
上的字符顺序和a..h is a consecutive range依托:
char firstChar = g.charAt(0);
if (firstChar >= 'a' && firstChar <= 'h') {
// ..
}
Not'&&'it should be ''||。 –
@tintinmj不在这种情况下,这是范围检查“之间a和h,包容性”。切换到“||”而不应用DM会匹配所有内容:) – user2864740
nope it ok !!!! –
对此使用正则表达式。将字符串的第一个字符作为子字符串剪切,并与其匹配。
if(g.substring(0, 1).matches("[a-h]") {
// logic
}
做的另一种方式:
if(Array.asList("abcdefgh".toCharArray()).contains(g.charAt(0)))
{
//Logic
}
由于'Set'对'contains'(基于散列)有一个固定的时间访问权限,所以我更喜欢'Set'到'List'。 – Makoto
@Makoto True,但如何将'String'转换为'Set'而不将其转换为'List'?我相信我们需要写我们自己的方法来做到这一点。 – hemanth
我要说的是,你错过了最后一步 - 将它转换为'Set'会使它的性能稍微好一些。但是,接下来,你会遇到实际需要做的工作量的问题,这些工作相当微不足道,而且根本不是一个大数据集。或者,你可以用Guava做一些事情,并使用'Sets.newHashSet('a','b','c','d','e','f','g','h')。contains g.charAt(0))'。 – Makoto
上hemanth的答案的变化:
if("abcdefgh".contains(g.substring(0,1))) do_something();
或
if("abcdefgh".indexOf(g.charAt(0)) >= 0) do_something();
I挖掘它 - 看起来简洁明了。 – user2864740
您可以将'g.charAt(0)'赋值给一个变量,以至少缩短它。 – csmckelvey
请记住,这些字母只是十进制的值:a = 97,b = 104。因此,您还可以检查g.CharAt(0)是否相等或在97和104之间。 – chwi