确定字符串是不是以字母 A 到 I 开头
Posted
技术标签:
【中文标题】确定字符串是不是以字母 A 到 I 开头【英文标题】:Determine if string starts with letters A through I确定字符串是否以字母 A 到 I 开头 【发布时间】:2012-01-22 07:48:04 【问题描述】:我有一个简单的 java 作业。我需要确定一个字符串是否以字母 A 到 I 开头。我知道我必须使用 string.startsWith();但我不想写,if(string.startsWith("a"));
一直到我,看起来效率很高。我应该使用某种循环吗?
【问题讨论】:
大写?小写?要么? 如果您需要同时匹配大小写字符,请查看我的帖子。 Mark Byers 只匹配大写,我们有一些匹配小写的帖子,只需选择一个(并更新您的问题帖子以说明您想要哪一个)。 【参考方案1】:你不需要正则表达式。
试试这个,假设你只想要大写:
char c = string.charAt(0);
if (c >= 'A' && c <= 'I') ...
如果您确实需要正则表达式解决方案,则可以使用此 (ideone):
if (string.matches("^[A-I].*$")) ...
【讨论】:
好的,这行得通。但是 ^ 和 .*$ 到底是什么意思?我知道 [a-i] 意味着 a 到 i 我的意思是,我在问 ^ 和 .*$ 是什么意思,以及我为什么需要它。我喜欢理解一切,因为我们还没有在我的计算机科学课上学到这一点 @Archey 表示字符串的开头,.表示任意字符,* 表示任意次数,$ 表示行尾。因此,基本上是行首,然后是 A-I,然后是任何字符 0 次或更多次,直到行尾。 @Archey 你可以通过点击两个上下箭头旁边的复选标记来接受他的回答【参考方案2】:if ( string.charAt(0) >= 'A' && string.charAt(0) <= 'I' )
应该这样做
【讨论】:
【参考方案3】:为了简洁起见,这个怎么样?
if (0 <= "ABCDEFGHI".indexOf(string.charAt(0)))
// string starts with a character between 'A' and 'I' inclusive
【讨论】:
合理,现在把它放到一个方法中,做A和I参数。 满足上述条件,如果在字符串中找到第一个字符,indexOf将返回一个大于-1的值。现在它会表现得好像所有字母都接受 BCDEGHI 是正确的。 @Bill,这种方法显然不是范围检查的最佳解决方案,对于一组字符,例如“AEOIU”,它工作得很好。 @refp,我想你会发现代码正确,包括'A'
、(0 <= 0) == true
:-)【参考方案4】:
试试
string.charAt(0) >= 'a' && string.charAt(0) <= 'j'
【讨论】:
【参考方案5】:char c=string.toLowerCase().charAt(0);
if( c >= 'a' && c <= 'i' )
...
这样可以很容易地将其提取为方法:
public static boolean startsBetween(String s, char lowest, char highest)
char c=s.charAt(0);
c=Character.toLowerCase(c); //thx refp
return c >= lowest && c <= highest;
这是任何内联解决方案的首选。为了获胜,请将其标记为 final,以便 java 为您内联它,并为您提供比编码内联解决方案更好的性能。
【讨论】:
您不应该将整个字符串小写,请查看我在帖子中如何解决它,是的.. 我知道;过早优化;-) 你是对的,它也复制了整个事情。只要分解成方法,还不如分步分解成自己的变量。【参考方案6】:if ( string.toUpperCase().charAt(0) >= 'A' && string.toUpperCase().charAt(0)
应该是最简单的版本...
【讨论】:
以上是关于确定字符串是不是以字母 A 到 I 开头的主要内容,如果未能解决你的问题,请参考以下文章
如何使用forAll检查数组中的所有字符串是不是以大写字母开头?
正则表达式,由英文字母和数字组成的4-16位字符,以字母开头,怎么写