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();
}