4

如何创建一个循环,将字符串“abcc”转换为它们的字母位置的总和,比如 a=1 b=2 c=3,它对字符串 1+2+3+3=9 求和。

    import java.util.Arrays;

    public class Test
    {
            public static void main(String[] args)
            {
            String original = "hello";
            char[] chars = original.toCharArray();
            Arrays.sort(chars);
            String sorted = new String(chars);
            System.out.println(sorted);


                }
           }
4

4 回答 4

6

您可以使用ASCII值。a有价值97b98等等。

private int printSum(String original){
    int sum = 0;
    if(original!=null){
        char[] arr = original.toLowerCase().toCharArray();
        for(int x :arr){
            sum+= (x-96);
        }
    }
    return sum;
}
于 2013-05-25T15:55:56.827 回答
3

您可以利用字符可以转换为整数的事实,从而采用它们的 ASCII 值。例如 System.out.println((int)'a') 将打印 '97'。知道了这一点,您只需根据它是大写字母还是小写字母减去某个数字,a 得到 1,b 得到 2 等等。

于 2013-05-25T15:55:43.623 回答
1
  1. 使用正则表达式从字符串中删除非字母字符
  2. 使用 toLower() 或 toUpper() 修改字符串
  3. 将字符串转换为 charArray
  4. 将初始结果设置为 0
  5. Foreach char 在数组中,用 64(如果使用大写)或 96(如果使用小写)减去 char 值并将其添加到结果中
于 2013-05-25T16:03:43.710 回答
1

这里有两种解决方案:一种根据要求使用循环,另一种使用递归。这适用于大写和小写字母,但不考虑非字母字母。这可以很容易地在 if 语句中进行测试,具有以下标准:Character.isAlphabetic( c ).

public class Main {

    static final int LOWERCASE_OFFSET = 96;
    static final int UPPERCASE_OFFSET = 64;

    public static void main( String[] args ){
        System.out.println(recursion( "Abcc" ));
    }

    static int recursion( String str ) {
        if( str.isEmpty() )
            return 0;

        char c = str.charAt( 0 );
        int charVal = Character.isUpperCase( c ) ? c - UPPERCASE_OFFSET : c - LOWERCASE_OFFSET;
        return charVal + recursion( str.substring( 1 ) );
    }

    static int loop( String str ) {
        int val = 0;
        for( char c : str.toCharArray() ) {
            val += Character.isUpperCase( c ) ? c - UPPERCASE_OFFSET : c - LOWERCASE_OFFSET;
        }
        return val;
    }
}
于 2013-05-25T16:07:59.107 回答