如何在不使用toUpperCase方法的情况下将字符串转换为大写?

时间:2016-12-14 23:37:24

标签: java string

我是java的初学者,无法使用此代码。我要做的是将任何输入的字符串转换为大写,而不使用toUpperCase字符串方法。这就是我所拥有的:

public String toUpperCase(String str)
{
    for(int i = 0; i < str.length(); i++)
    {
        char a = str.charAt(i);
        a = Character.toUpperCase(a);
        str += Character.toString(a);
    }
return str;
}

6 个答案:

答案 0 :(得分:8)

您正在使用str作为输入和输出(因此您的String具有无限长度,因为您不断添加字符)。您可以使用static,因为您没有使用实例状态。而且,您可以使用for-each循环。最后,添加另一个String,或更好的StringBuilder,如

public static String toUpperCase(String str) {
    StringBuilder sb = new StringBuilder();
    for (char ch : str.toCharArray()) {
        sb.append(Character.toUpperCase(ch));
    }
    return sb.toString();
}

答案 1 :(得分:5)

有以下方法,但它不考虑英语以外的任何字符(没有diacritics,a-z后面没有其他语言的字符。)

public String toUpperCase(String str) {
    char[] chars = str.toCharArray();

    for (int i=0; i<chars.length; i++) {
        char c = chars[i];
        if ('a' <= c && c <= 'z') {
            chars[i] = (char) (c - 'a' + 'A');
        }
    }

    return new String(chars);
}

答案 2 :(得分:2)

C&#39; mon guys,Java 8多年来已经出局了!

/**
 * Converts an all-lowercase String to
 * uppercase. Retains only spaces, any
 * other characters will be lost.
 */
public static String toUpperCase(String s) {
    int diff = 'a' - 'A'; // 32

    return s.chars()
            .filter(c -> c >= 'a' && c <= 'z' || c == ' ')
            .mapToObj(c -> String.valueOf((char) (c - (diff))))
            .collect(Collectors.joining());
}

答案 3 :(得分:1)

由于您无法使用toUpperCase()方法,因此您可以使用ASCII table从小写字母到大写字母,减去32。

  

'a'= 97,'A'= 65
  'b'= 98,'B'= 66
  ...
  'z'= 122,'Z'= 90

public static int DIFF = 'a' - 'A'; // 32

public static String toUpperCase(String str) {
    StringBuilder sb = new StringBuilder();
    for (char c : str.toCharArray()) {
        if (Character.isLowerCase(c)) {
            sb.append(String.valueOf((char)(c - DIFF)));
        } else {
            sb.append(c);
        }
    }
    return sb.toString();
}

答案 4 :(得分:1)

我知道你的学校可能不允许你使用StringBuilder,以防万一你也不能使用数组。这是学校可能接受的另一种原始方法:

public static String toUpperCase(String s){
    String str = "";
    for(int x=0; x<s.length(); x++){
        char ch = s.charAt(x);
        if(ch >= 'a' && ch <= 'z')
            str += "" + (char)(ch - 32);
        else
            str += "" + ch; 
    }
    return str;
}

<强>测试

System.out.println(toUpperCase("aAbBcC"));

<强>输出:

AABBCC

答案 5 :(得分:1)

试一试:

public static String toUpperCase(String str) {
        String result = "";
        for (int i = 0; i < str.length(); i++) {
            int v = str.charAt(i);
            if (v > 96 && v < 123) {
                v -= 32;
            }
            result+=(char)v;

        }
        return result;
    }