确定JAVA中的字符是否有大小写

时间:2017-06-20 14:15:45

标签: java android string

在JAVA(Android)中,我试图在字符串中确定每个字符是否具有大写或小写的等效字符。

我的目标不是降低或升高案例,而是要知道是否可能。

例如,此函数将返回true:'e''''''''''''''''''''''' 表情符号或汉字的错误。

有没有可以做到这一点的功能?

编辑:为了更清楚,该函数应该为参数使用一个字符,而不是String,如果该字符没有大写或小写版本,则返回false。

7 个答案:

答案 0 :(得分:3)

你可以试试这个:

boolean validate(char c){
    return Character.isUpperCase(c) || Character.isLowerCase(c);
}

如果只是一个大写或小写的字母,这将返回true。否则它将返回false。

答案 1 :(得分:1)

对于一个简单的方法,有Character.isLowerCase。但实际上你需要小心 - 这取决于语言。有些语言可能有小写'é'但没有大写。或者像土耳其语“我”可能有不同的小写版本比其他语言。

要解决这个问题,我会使用像Character.isLetter(myChar) && String.valueOf(myChar).toLowerCase().equals(String.valueOf(myChar))这样的东西。请记住使用toLowerCase版本,如果不在默认语言环境中进行比较,则将Locale作为参数。

答案 2 :(得分:1)

检查字符是小写字母还是大写字母:

Character.isLowerCase(ch) != Character.isUpperCase(ch)

或者,您可以比较角色的低层和高层形式:

Character.toLowerCase(ch) == Character.toUpperCase(ch)

但是,您需要注意语言环境(土耳其语中有一个字母,我认为大写和小写形式相同)。

答案 3 :(得分:1)

仍然没有完全指定要求(你是否关心大写/小写的等价是否与原来的不同的字符),但我对这个问题最直接的解释是:

  

对于给定字符串中的每个字符chtoUpperCase(ch)产生大写字符或toLowerCase(ch)产生小写字符是真的吗?

我这样说是因为Character.toUpperCase()返回“字符的大写等价物,如果有的话;否则,字符本身”。 String.toUppercase()的{​​{3}}没有提到如果某些字符没有大写等价物会发生什么,但我认为我们可以假设它返回那些字符不变,Character.toUpperCase()也是如此。

因此,直接实施该条件将是测试

    Character.isUpperCase(s.toUpperCase().charAt(0)) ||
    Character.isLowerCase(s.toLowerCase().charAt(0));

将每个字符作为字符串。

我在这里使用String而不是Character大小写转换函数,以便利用区域设置敏感的映射。不仅如此,不管语言环境如何,都有一些字符无法通过Character.toUpperCase()转换为大写字母,因为它们的大写等价物不止一个字符!例如,我们会得到错误的\u00df'ß'结果(有关详情,请参阅doc)。

public class TestUpper {
    public static void main(String[] args) {
        final String test = "\u0633\u0644\u0627\u0645 World \u00df\u01c8eéilLOP\u76f4!";

        for (Character ch : test.toCharArray()) {
            System.out.format("'%c' (U+%04x): hasCase()=%b%n", ch, (int)ch, hasCase(ch));
        }
    }

    static boolean hasCase(Character ch) {
        String s = ch.toString();
        // Does the character s have an uppercase or a lowercase equivalent?
        return Character.isUpperCase(s.toUpperCase().charAt(0)) ||
             Character.isLowerCase(s.toLowerCase().charAt(0));
    }
}

结果:

'س' (U+0633): hasCase()=false
'ل' (U+0644): hasCase()=false
'ا' (U+0627): hasCase()=false
'م' (U+0645): hasCase()=false
' ' (U+0020): hasCase()=false
'W' (U+0057): hasCase()=true
'o' (U+006f): hasCase()=true
'r' (U+0072): hasCase()=true
'l' (U+006c): hasCase()=true
'd' (U+0064): hasCase()=true
' ' (U+0020): hasCase()=false
'ß' (U+00df): hasCase()=true
'Lj' (U+01c8): hasCase()=true
'e' (U+0065): hasCase()=true
'é' (U+00e9): hasCase()=true
'i' (U+0069): hasCase()=true
'l' (U+006c): hasCase()=true
'L' (U+004c): hasCase()=true
'O' (U+004f): hasCase()=true
'P' (U+0050): hasCase()=true
'直' (U+76f4): hasCase()=false
'!' (U+0021): hasCase()=false

这些测试用例包括阿拉伯字母和中文字符(isLetter(),但没有大写/小写),请求的测试字母,空格和标点符号以及标题字母。

根据问题中目前陈述的标准,结果是正确的。但是,OP在评论中说他希望函数返回false用于标题字符,例如U + 01c8,而上面的代码返回true,因为它们具有大写和小写等价物(U + 01c7和U + 01c9)。但OP的陈述似乎是基于错误的印象,即标题字母具有大写和小写等价物。正在进行的讨论尚未解决这一混乱局面。

免责声明:此答案并未尝试考虑补充或代理代码点。

答案 4 :(得分:-1)

两个字符串大写和小写不匹配并不一定意味着字符串有效。 true1不等于TRUE1,但未通过测试用例。你需要检查每个角色。这是一个粗略的剪辑,你可能不得不为表情符号和汉字做点什么。

public static boolean isAllCase(String value) {
    String upper = value.toUpperCase();
    String lower = value.toLowerCase();

    if(upper.length() != lower.length())
        return false;

    for(int i = 0; i < upper.length(); i++) {
        if(upper.charAt(i) == lower.charAt(i))
            return false;
    }

    return true;
}

答案 5 :(得分:-1)

 public boolean hasEquivalentCase(char ch) { 
    return (Character.isLowerCase(ch)) || Character.isUpperCase(ch)
  }

答案 6 :(得分:-2)

public boolean validate(char value){
    if( (value >= 'a' && value <= 'z') || (value >= 'A' && 
       value <= 'Z')
          return true;
    return false;
}

这适用于你的String的每个字符。

public boolean All( String cad ){
    for( int i = 0; i < cad.lenght() ; i++ ){
       if( !validate(cad.charAt(i)) ){
           #the letter has not upper or lower
           return false; 
       }
    }
    return true;
}