Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何只测试字符串中的字母或撇号?_Java_Vb.net_String - Fatal编程技术网

Java 如何只测试字符串中的字母或撇号?

Java 如何只测试字符串中的字母或撇号?,java,vb.net,string,Java,Vb.net,String,我需要检查字符串中的一些内容: 第一个字母必须是大写字母 只有字母或撇号(') 最多可以使用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

我需要检查字符串中的一些内容:

  • 第一个字母必须是大写字母
  • 只有字母或撇号(')
  • 最多可以使用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
    

    您的代码对于您尝试执行的操作非常复杂。它很长,里面有很多。您可以使用正则表达式或通过正则比较字符串中的每个元素来解决此问题。这是第二种方法的一个示例:

    Private Function IsValidName(name As String) As Boolean
        If String.IsNullOrWhiteSpace(name) Then Return False
    
        Return Char.IsUpper(name.AsEnumerable().First()) AndAlso
               name.AsEnumerable().All(Function(c) Char.IsLetter(c) OrElse c.Equals("'"c)) AndAlso
               name.AsEnumerable().Count(Function(c) c.Equals("'"c)) <= 2
    End Function
    
    私有函数IsValidName(名称为字符串)为布尔值
    如果String.IsNullOrWhiteSpace(name),则返回False
    返回Char.IsUpper(name.AsEnumerable().First())和
    name.AsEnumerable().All(函数(c)Char.isleter(c)或lse c.Equals(“'c)),以及
    
    name.AsEnumerable().Count(函数(c)c.Equals(“'c))您可以用两行正则表达式来实现这一点

    Private Function IsValidName(name As String) As Boolean
        Dim match = Regex.Match(name, "^[A-Z]((')|[A-Za-z])*$")
        Return match.Success AndAlso match.Groups(2).Captures.Count <= 2
    End Function
    
    私有函数IsValidName(名称为字符串)为布尔值
    Dim match=Regex.match(名称,“^[A-Z](“)|[A-Za-Z])*$”)
    
    请返回match.Success和also match.Groups(2).Captures.Count,重新格式化代码以提高可读性-很难读取签名和函数体。
    Private Function IsValidName(name As String) As Boolean
        Dim match = Regex.Match(name, "^[A-Z]((')|[A-Za-z])*$")
        Return match.Success AndAlso match.Groups(2).Captures.Count <= 2
    End Function