java如何只测试字符串中的字母或撇号?
我需要检查字符串中的一些内容:
- 第一个字母必须是大写字母
- 只有字母或撇号(')
- 最多可以使用2个撇号
下面的代码总是返回字符串不一致,除非我只输入1个大写字母。我如何纠正它以满足我的要求
Private Function setName(ByVal pName As String)
Dim letters As Integer()
Dim aphCount As Integer = 0
Dim isvalid As Boolean = True
For i As Integer = 0 To pName.Length - 1 Step 1
ReDim letters(i)
letters(i) = Asc(pName.Substring(i, 1))
Next
If Not letters(0) >= 65 And letters(0) <= 90 Then
isvalid = False
End If
For i As Integer = 1 To pName.Length - 1 Step 1
If letters(i) >= 39 And letters(i) <= 122 Then
If letters(i) = 39 Then
aphCount += 1
If aphCount > 2 Then
isvalid = False
End If
ElseIf letters(i) >= 65 And letters(i) <= 90 Then
ElseIf letters(i) >= 97 And letters(i) <= 122 Then
Else isvalid = False
End If
Else isvalid = False
End If
Next
If isvalid = False Then
If MsgBox("you put in an invalid name", MsgBoxStyle.RetryCancel, "name error") = MsgBoxResult.Cancel Then
pName = "Hero" & heroCount
Else
pName = inputName()
pName = setName(pName)
End If
End If
Return pName
End Function
编辑:感谢大家的帮助,我开始学习正则表达式,并想出了一些有用的方法(使用java,我改用java,因为这是我学习编码的一个项目,java提供了更多):
public void checkName(String name) throws IllegalArgumentException{
String noSpaceName = name.replaceAll("\\s+","");
String pattern = "^[A-Z][A-Za-z]*'?[A-Za-z]*'?[A-Za-z]*";
Pattern re = Pattern.compile(pattern);
Matcher m = re.matcher(noSpaceName);
if (m.matches()){
name.replaceAll("\\s+"," ");
super.setName(name);
}else throw new IllegalArgumentException ("Exception: Name is invalid");
}
# 1 楼答案
你的代码对于你要做的事情来说非常复杂。它相当长,包含很多magic numbers。可以使用正则表达式或通过对字符串中的每个元素进行正则比较来解决这个问题。这是第二种方式的一个例子:
# 2 楼答案
可以用两行正则表达式来实现这一点