如何检查某个位置的字符串是不是包含字符 a-h?
Posted
技术标签:
【中文标题】如何检查某个位置的字符串是不是包含字符 a-h?【英文标题】:How to check if a string at a certain position contains character a-h?如何检查某个位置的字符串是否包含字符 a-h? 【发布时间】:2014-03-02 11:57:44 【问题描述】:我知道肯定有更简单的检查方法,但这就是我现在正在做的。
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')
【问题讨论】:
您可以将g.charAt(0)
分配给一个变量以至少缩短它。
请记住,字母只是十进制的值:a = 97,b = 104。因此您也可以检查 g.CharAt(0) 是否等于或介于 97 和 104 之间。
【参考方案1】:
hemanth 答案的变体:
if("abcdefgh".contains(g.substring(0,1))) do_something();
或
if("abcdefgh".indexOf(g.charAt(0)) >= 0) do_something();
【讨论】:
【参考方案2】:依赖于字符排序和a..h is a consecutive range:
char firstChar = g.charAt(0);
if (firstChar >= 'a' && firstChar <= 'h')
// ..
【讨论】:
不是&&
,应该是||
。
@tintinmj 在这种情况下不是,这是对“a 和 h 之间,含”的范围检查。在不应用 DM 的情况下切换到 ||
将匹配所有内容:)
@tintinmj:换一种方式阅读:if('a' <= firstChar && firstChar <= 'h')
。现在用||
代替&&
阅读。
糟糕错过了。如果使用了||
,那么 z 将是有效的。抱歉评论有误。
@tintinmj 事实上所有的角色都是……【参考方案3】:
另一种方法:
if(Array.asList("abcdefgh".toCharArray()).contains(g.charAt(0)))
//Logic
【讨论】:
我更喜欢Set
而不是List
,因为Set
对contains
具有恒定的时间访问权限(基于哈希)。
@Makoto True,但是如何将String
转换为Set
而不将其转换为List
?我相信我们需要编写自己的方法来做到这一点。
我的意思是你错过了最后一步 - 将其转换为 Set
会使其性能稍好一些。但是随后,您会遇到一个问题,即做一些相当琐碎的事情实际上需要的工作量,而且根本不是大量数据。或者,您可以使用 Guava 做一些事情并使用 Sets.newHashSet('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h').contains(g.charAt(0))
。
"abcdefgh".toCharArray()
不起作用,因为它会生成一个List<char[]>
。另外,当然要创建一个静态辅助对象。 Collections.unmodifiableSet(new HashSet<Character>(Arrays.asList('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')))
【参考方案4】:
为此使用正则表达式。将字符串的第一个字符剪切为子字符串,然后匹配它。
if(g.substring(0, 1).matches("[a-h]")
// logic
【讨论】:
以上是关于如何检查某个位置的字符串是不是包含字符 a-h?的主要内容,如果未能解决你的问题,请参考以下文章