欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java基础 - java.lang.String.charAt()方法的使用,String字符串之间的相加(完美解决内存溢出问题)

程序员文章站 2022-06-09 21:11:51
...

java.lang.String.charAt()方法的使用:

1.背景

根据业务需求,需要把两个由数字0-9组成的String字符串进行相加,由于会有int类型越界的问题,不能使用Integer的ParseInt()方法来进行操作整个数据。这里就使用纯粹的操作String字符串相加的方法。这其中就涉及到了charAt()方法的使用。

2.详解charAt()

类型 方法 描述
char charAt(int index) 返回指定索引index处的 char值。

声明java.lang.String.charAt()的方法为

public char charAt(int index) {
    if (isLatin1()) {
        return StringLatin1.charAt(value, index);
    } else {
        return StringUTF16.charAt(value, index);
    }
}

它的索引范围为0到length()-1,索引为负或越界会报出IndexOutOfBoundsException异常。因为它是返回char类型的数据,所以可以直接使用 int 接收参数(属于向上转型):(点击查看 ASCII码表

//注意看输出的数据
String s = "A";//A 的ASCII码为65
int i = s.charAt(0);//使用int接收char类型的参数
System.out.println(i);//输入 65
System.out.println((char)i);//输出 A

根据以上的特性,在我的需求中,可以直接得到对应String字符串位置的数据:

String s = "123";
int n = s.charAt(0);//1 得到仍然是char类型
int m = s.charAt(1);//2
System.out.println(n + m);//输出 99 因为 `1`和`2`分别对应的ASCII码为49和50

使用charAt(int index)得到数据仍然是char类型的数据,这里进行两个char数量类型之间的相加减得到是ASCII码之间的运算,那么怎么才能得到int之间的加减结果呢?下面有两种方法:

2.1使用Integer.ParseInt(String s):(不推荐,效率低下)

String s = "123";
//使用String.valueOf()的原因是因为Integer.parseInt()需要传递的参数是Stirng类型的
int n = Integer.parseInt(String.valueOf(s.charAt(0)));// 1 
int m = Integer.parseInt(String.valueOf(s.charAt(1)));// 2
System.out.println(n + m);//输出 3 因为 `1`和`2`先被转化为String类型,后被转化为int类型

2.2 使用charAt() - ‘0’:(推荐使用,效率高)

String s = "123";
int n = s.charAt(0) - '0';// 1 得到ASCII码 1
int m = s.charAt(1) - '0';// 2 得到ASCII码 2
System.out.println(n + m);//输出 3 
System.out.println((char)(n + m));//输出ascii码表对应的字符

3.需求解析

题目链接

https://leetcode-cn.com/problems/multiply-strings/

public String addStrings(String num1, String num2) {
    int i = num1.length() - 1, j = num2.length() - 1, add = 0;
    StringBuffer ans = new StringBuffer();
    while (i >= 0 || j >= 0 || add != 0) {
        int x = i >= 0 ? num1.charAt(i) - '0' : 0;//效率极高
        int y = j >= 0 ? num2.charAt(j) - '0' : 0;
        int result = x + y + add;
        ans.append(result % 10);
        add = result / 10;
        i--;
        j--;
    }
    // 计算完以后的答案需要翻转过来
    ans.reverse();
    return ans.toString();
}