1)String转换成int类型:在 Java 中要将 String 类型转化为 int 类型时,需要使用 Integer 类中的 parseInt()
方法或者 valueOf()
方法进行转换。
int i = Integer.parseInt([String]);//直接使用静态方法,不会产生多余的对象,但会抛出异常
int i = Integer.valueOf(my_str).intValue();//Integer.valueOf(s) 相当于 new Integer(Integer.parseInt(my_str)),也会抛异常,但会多产生一个对象
parseInt()
方法:String str="123";
try{
int a = Integer.parseInt(str);
} catch (NumberFormatException e){
e.printStackTrace();
}
利用valueOf()
方法:
String str="123";
try{
int b = Integer.valueOf(str).intValue();
}catch(NumberFormatException e){
e.printStackTrace();
}
2)int类型转换成String类:在 Java 中要将 int 类型转化为 String 类型时,需要使用 Integer 类中的 toString()
方法或者String类中的 valueOf()
方法进行转换,也可以使用重载的 “+” 运算符进行强制类型转换,即: + ""
。
Integer.toString(i)
方法转换:利用 String s = Integer.toString(i);
String.valueOf(i)
方法转换为字符串:利用String s = String.valueOf(i);//直接使用String类的静态方法,只产生一个对象
String s = "" + i;//会产生两个String对象
ASCII码从0到127,即(2的0次方减1)到(2的7次方减1).
- 字符’0’对应的ASCII码值是48(转化为int类型);
- 字符’9’对应的ASCII码值是57 (48+10-1=57);
- 字符‘A’对应的ASCII码值是65;
- 字符‘Z’对应的ASCII码值是90(65+26-1=90);
- 字符‘a’对应的ASCII码值是97;
- 字符‘z’对应的ASCII码值是122(97+26-1=122);
- 字符‘NULL(null)’对应的ASCII码值是0,‘NULL(null)’解释为空字符;
- 字符‘ (space)’对应的ASCII码值是40,‘ (space)’解释为空格;
其他相关ASCII码值见百度百科:ASCII
String.toCharArray()
方法 ,作用:将字符串转换为字符数组。String.charAt(int index)
方法:返回下标为index处的字符,利用for循环,实现将字符串存放到数组中。String.substring(int beginIndex,int endIndex)
方法:返回索引位置从beginIndex(包括)到endIndex(不包括)的子串,利用for循环,实现将字符串存放到数组中。例子:
1)String.toCharArray()
方法:将String对象的每一个下标位的对象保存在char[]中
String a = "abcd";
char[] b = a.toCharArray();
//此时b数组中保持的信息就是['a','b','c','d']
区分: String.split()
方法:根据你需要按照的分隔符来分割字符串。
String a = "avc,d,e,s,f";
String[] b = a.split(',');
//根据逗号将数据分开;
//遍历输出得到的b的对象为"avc","d","e","s","f"。
2)利用String.charAt()
方法:返回下标为index处的字符,利用for循环,边读取字符串中的数字,边赋值给字符数字。
import java.util.Scanner;
public class Solution{
public void main(String[] args){
char[] chs = new char[100];
String str;
Scanner sc = new Scanner(System.in);
System.out.print("请输入字符串: ");
str = sc.nextLine();//下面有对nextLine()方法的解释
System.out.println();
for(int i=0;iout.print(chs[i] + "");
}
}
}
解释:
nextLine()和next()
next()读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。
nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的.
在控制台上输入” hello”
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
System.out.println(s);
打印出来的是” hello”;
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
System.out.println(s);
打印出来的是”hello”,自动舍去了有效字符前的空格。
假如有一段文本如下:
abc def ghij
kl mno pqr st
uvw xyz
你用next(),第一次取的是abc,第二次取的是def,第三次取的是ghij
你用nextLine(),第一次取的是abc def ghij,第二次取的是kl mno pqr st,第三次取的是uvw xyz
明白了吧。前一个是以回车或空格为分隔符,一次取一个单词,后一个是以回车为分隔符,一次取一行。
3)String.substring(int beginIndex,int endIndex)
方法:返回索引位置从beginIndex(包括)到endIndex(不包括)的子串,利用for循环,实现将字符串存放到数组中。
String a = "abc";
String[] arr = new String[a.length()];
for(int i = 0; i
arr[i] = a.substring(i, (i+1));
}//最后输出数组就可以了。System.out.println(java.util.Arrays.toString[arr]);
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入一个字符串,包括数字字母符号,可以为空
如果是合法的数值表达则返回该数字,否则返回0
输入
+2147483647
1a33
输出
2147483647
0
边界条件:空字符串,字符串长度为0;
public class Solution {
public int StrToInt(String str) {
if(str=="" || str.length()==0){
return 0;
}
int sum=0;
int fuhao=1;//当第一位为正或无符号时,置符号位为1
/*if(str.charAt(0)=='-'){
fuhao=-1;
}
if(str.charAt(0)=='+' || str.charAt(0)=='-'){
str = str.substring(1,str.length());
}*/
if(str.charAt(0)=='-'){
fuhao=-1;//当第一位为符号时,置符号位为-1
str = str.substring(1,str.length());
}
if(str.charAt(0)=='+'){
str = str.substring(1,str.length());
}
char[] a = str.toCharArray();
for(int i=0; iif(a[i]<48 || a[i]>57){
return 0;
}//一定注意排除不合法的数值表达式
sum=sum*10+a[i]-48;
}
sum=sum*fuhao;
return sum;
}
}
解析:这种操作为不正确的操作。
报错:
答案错误:您提交的程序没有通过所有的测试用例
case通过率为91.67%测试用例:
对应输出应该为:
0
你的输出为:
java.lang.StringIndexOutOfBoundsException: String index out of range: 0
意思应该是substring()函数用的时候出界限了。
当字符串只有一个符号位时,应该输出0的,但是仍然进行了截取,肯定不行。
改正思路:加入判断字符串只有符号位的情况。
public class Solution {
public int StrToInt(String str) {
if(str=="" || str.length()==0){
return 0;
}
if((str.charAt(0)=='+' || str.charAt(0)=='-') && str.length()==1){//加入判断字符串只有符号位的情况
return 0;
}
int sum=0;
int fuhao=1;//当第一位为正或无符号时,置符号位为1
/*if(str.charAt(0)=='-'){
fuhao=-1;
}
if(str.charAt(0)=='+' || str.charAt(0)=='-'){
str = str.substring(1,str.length());
}*/
if(str.charAt(0)=='-'){
fuhao=-1;//当第一位为符号时,置符号位为-1
str = str.substring(1,str.length());
}
if(str.charAt(0)=='+'){
str = str.substring(1,str.length());
}
char[] a = str.toCharArray();
for(int i=0; iif(a[i]<48 || a[i]>57){
return 0;
}//一定注意排除不合法的数值表达式
sum=sum*10+a[i]-48;
}
sum=sum*fuhao;
return sum;
}
}
题外话:这个可以通过,不知道为什么,感觉也应该报同样的错,如果只有一个符号位, 不是应该报错越界什么的错误吗?
public class Solution {
public int StrToInt(String str) {
if(str=="" || str.length()==0){
return 0;
}
int sum=0;
int fuhao=1;//当第一位为正或无符号时,置符号位为1
if(str.charAt(0)=='-'){
fuhao=-1;
}
if(str.charAt(0)=='+' || str.charAt(0)=='-'){
str = str.substring(1,str.length());
}
/*if(str.charAt(0)=='-'){
fuhao=-1;//当第一位为符号时,置符号位为-1
str = str.substring(1,str.length());
}
if(str.charAt(0)=='+'){
str = str.substring(1,str.length());
}*/
char[] a = str.toCharArray();
for(int i=0; iif(a[i]<48 || a[i]>57){
return 0;
}//一定注意排除不合法的数值表达式
sum=sum*10+a[i]-48;
}
sum=sum*fuhao;
return sum;
}
}
觉得应该改成这样的:
public class Solution {
public int StrToInt(String str) {
if(str=="" || str.length()==0){
return 0;
}
if((str.charAt(0)=='+' || str.charAt(0)=='-') && str.length()==1){
return 0;
}
int sum=0;
int fuhao=1;//当第一位为正或无符号时,置符号位为1
if(str.charAt(0)=='-'){
fuhao=-1;
}
if(str.charAt(0)=='+' || str.charAt(0)=='-'){
str = str.substring(1,str.length());
}
/*if(str.charAt(0)=='-'){
fuhao=-1;//当第一位为符号时,置符号位为-1
str = str.substring(1,str.length());
}
if(str.charAt(0)=='+'){
str = str.substring(1,str.length());
}*/
char[] a = str.toCharArray();
for(int i=0; iif(a[i]<48 || a[i]>57){
return 0;
}//一定注意排除不合法的数值表达式
sum=sum*10+a[i]-48;
}
sum=sum*fuhao;
return sum;
}
}
当然,第二种方法更快一些,不是特别特别清楚为什么。两个算法都是两个if语句判断,都需要进行判断,不知道快是快在了哪???