如何将字母字符串转换为 int 并对其进行算术运算?

How do I convert an alphabetic string to int and do arithmetic on it?

我到处寻找如何将 String 转换为 int,示例使用数字字符串,即它们展示了如何将“123”更改为 123。这根本不是我想要的做。我的字符串是按字母顺序排列的。我知道这一点是因为前两种方法要求我首先检查它是否包含大写字符,然后将其转换为所有大写字符。我成功地做到了这两点。现在第三种方法要求将其转换为 int,并对其执行算术函数,现在我被卡住了。我尝试使用.valueOf(),即字符的ascii数值,但它一直抛出错误。

public class ChangeCase {
   String stringToCheck;

  public int convertToIntPlusTen() {
        // Create new field for the converted string
        String asciiValue = "";
        // Break original string down to char array
        final char[] chars = stringToCheck.toCharArray();
        // Find the ascii value of each character and add it to the new field
        for (int i = 0; i < chars.length; i++) {
            asciiValue += String.valueOf((int) chars[i]);
        }
        // Convert string of numeric characters to int
        int asciiInt = Integer.parseInt(asciiValue);
        // Add ten to the resulting int
        asciiInt += asciiInt + 10;
        StringBuilder sbf
                = new StringBuilder("");
        sbf.append(asciiInt);

        return asciiInt;
    }
}

public class AppDriver {
    public static void main(String[] args) {
       ChangeCase changeCase = new ChangeCase();
        changeCase.stringToCheck = "Foxes";
        changeCase.convertToIntPlusTen();
    }
}

现在因为字符的ascii值是'F' = 070, 'o' = 111, 'x' = 120, 'e' = 101, and 's' = 115,那么我预计它会生成数字字符串“070111120101115”,然后它将变为 int 070111120101115。加十将使其成为 070111120101125,这是预期的输出。

相反,我得到:

Exception in thread "main" java.lang.NumberFormatException: For input string: "70111120101115"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:583)
    at java.lang.Integer.parseInt(Integer.java:615)
    at mainpackage.SubChangeCase.convertToIntPlusTen(SubChangeCase.java:45)
    at mainpackage.AppDriver.main(AppDriver.java:133)

我在想这可能更多的是逻辑错误而不是操作错误,即我可能一开始就错误地处理了这个问题。因为我看到我的堆栈跟踪确实有预期的输入字符串。不幸的是,由于互联网世界中几乎所有的代码示例都是关于转换数字字符串的,所以我没有找到任何可以帮助解决这个问题的方法。

70111120101115 对于 整数 来说太大了。您必须将其存储在 long

你也打错了——你实例化了错误的 class。是 ChangeCase,不是 SubChangeCase

因此,您的 class 应该是:

  public long convertToIntPlusTen() {
        // Create new field for the converted string
        String asciiValue = "";
        // Break original string down to char array
        final char[] chars = stringToCheck.toCharArray();
        // Find the ascii value of each character and add it to the new field
        for (int i = 0; i < chars.length; i++) {
            asciiValue += String.valueOf((int) chars[i]);
        }
        // Convert string of numeric characters to int
        long asciiInt = Long.parseLong(asciiValue);
        asciiInt += asciiInt + 10;
        StringBuilder sbf
                = new StringBuilder("");
        sbf.append(asciiInt);

        return asciiInt;
    }

所以你的最终代码应该是:

public class ChangeCase {
   String stringToCheck;

  public long convertToIntPlusTen() {
        // Create new field for the converted string
        String asciiValue = "";
        // Break original string down to char array
        final char[] chars = stringToCheck.toCharArray();
        // Find the ascii value of each character and add it to the new field
        for (int i = 0; i < chars.length; i++) {
            asciiValue += String.valueOf((int) chars[i]);
        }
        // Convert string of numeric characters to int
        long asciiInt = Long.parseLong(asciiValue);
        asciiInt += asciiInt + 10;
        StringBuilder sbf
                = new StringBuilder("");
        sbf.append(asciiInt);

        return asciiInt;
    }
}

public class AppDriver {
    public static void main(String[] args) {
       ChangeCase changeCase = new ChangeCase();
        changeCase.stringToCheck = "Foxes";
        changeCase.convertToIntPlusTen();
    }
}