java - Java中如何提取一个字符串中的所有整数并转换为指定的char值?

标签 java string algorithm numberformatexception

问题陈述是找到一个字符串之间的数字,并为给定的数字找到合适的字符。具体来说,0代表'a',1代表'b',2代表'c'......等等。然后又是 26 代表 'a',27- 'b',28- 'c'....继续这样下去。

为了更好的理解:

Input String: ab1ab

Output: b

解释:字符串中有一个整数值'1'代表'b'。

Input String 2: abcd00hdjhs1224

Output: ac

解释:有两个整数值'00'和'1224'分别代表'a'和'c'。

我的解决方案的问题是,当我将整数值存储为 int 或 long 数据类型时,大值会抛出 NumberFormatException。

克服这个问题的更好方法是什么?不仅仅是编程问题,它还是算法问题。如何在不担心大数或 BigInteger 类的情况下实现解决方案?

注意:如果出现多个整数,则整体被视为一个整数值。(这就是我出现问题的地方)

最佳答案

模数运算对加法和乘法具有分配性。即

  • (A+B)%n = (A%n + B%n)%n
  • (A*B)%n = (A%n * B%n)%n

它有什么用?

假设“abcdefgh”代表一个大数字,其中 a-h 是该数字的数字。很明显:

  • abcdefgh = (abcde * 1000 + fgh) 或
  • abcdefgh = (a * 10000000 + bcdefgh) 或
  • abcdefgh = (a*10000000 + b*1000000 + c*100000 + d*10000 + e*1000 + f*100 + g*10 + h)

因为您只对 yourDigits%26 的结果感兴趣,您可以从左到右扫描输入字符串中找到的每个数字,然后乘以 10,然后加上下一个数字,然后取模和将其存储为新答案,直到到达字符串末尾:

public static void main(String[] args) { 
    System.out.println(mapNumbersToCharsAndConcat("ab1ab"));
    System.out.println(mapNumbersToCharsAndConcat("abcd00hdjhs1224"));
}
static String mapNumbersToCharsAndConcat (String input){
    char[] myChars = "abcdefghijklmnopqrstuvwxyz".toCharArray();
    StringBuilder sb = new StringBuilder();       
    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher(input);
    while(m.find()){
        String num = m.group();
        sb.append(myChars[modFromString(num)]);
    }
    return sb.toString();
}
static int modFromString(String num){
    int res = 0;   
    for (int i = 0; i < num.length(); i++){
        res = (res * 10 + (int)num.charAt(i) - '0') % 26; 
    }
    return res; 
}     

关于java - Java中如何提取一个字符串中的所有整数并转换为指定的char值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58079126/

相关文章:

java - 不相关类上的 JPQL 多个左连接

java - 使用 GSON 序列化时出现 "declares multiple JSON fields named"错误

c - 反转字符串 C

java - 如何计算一组字符串的最短唯一前缀?

Java字符串分割不一致

algorithm - 在图中找到成本小于 m 的最大区域

java - 项目打开时自动导入 Intellij IDEA java 样式格式化程序文件

java - 在 hazel 转换中使用 sql 谓词的嵌套获取/更新函数

algorithm - 可以从这四个有限函数中实现减函数吗?

绘制随机漫画风格云的算法