确定字符串是不是以字母 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 &lt;= 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检查数组中的所有字符串是不是以大写字母开头?

database 如何查询某个字段以某个字母开头的数据

正则表达式,由英文字母和数字组成的4-16位字符,以字母开头,怎么写

JavaScript变量

求一个正则表达式: 以英文字母开头,只能包含英文字母、数字、下划线

如果字符串以 E 和 A 开头,我想用数据显示不同的 Div,然后从数据中删除前两个字母