0.0 int与char之间的转换
char word1='d';
char word2='@';
System.out.println((int)word1); //100
System.out.println((int)word2); //64
char word3=1;
System.out.println(word3); //?
System.out.println((int)word3); //1
System.out.println((int)word3-'0'); //-47
System.out.println((int)(word3-'0')); //-47
System.out.println((int)'0'); //48
char word4='1';
System.out.println(word4); //1
System.out.println((int)word4); //49
System.out.println((int)word4-48); //1
System.out.println((int)word4-'0'); //1
System.out.println((int)(word4-'0')); //1
System.out.println(Integer.parseInt(String.valueOf(word4)));//1
System.out.println(Integer.parseInt(word4+""));//1
int p1=23500;
int p2=45321;
System.out.println((char)p1); //离
System.out.println((char)p2); //?
0.1 一个小问题:
String a = "321321";
int b = a.charAt(2);
System.out.println(a.charAt(2)); //1
System.out.println(b); //49
System.out.println((char) b); //1
String a1 = "12345";
int d = Integer.parseInt(String.valueOf(a1.charAt(2)));
int c = Integer.parseInt(String.valueOf(a1.charAt(3)));
System.out.println(d); //3
System.out.println(c); //4
String str = "123";
int sum = 0;
for(int i=0;i<str.length();i++){
sum += str.charAt(i); //150
// sum += str.charAt(i)-48; //6
// sum += str.charAt(i)-'0';//6
// sum += Integer.parseInt(str.charAt(i)+"");//6
// sum += Integer.parseInt(String.valueOf(str.charAt(i)));//6
}
System.out.println(sum);
1 如何将字串 String 转换成整数 int?
A. 有四种方法:
1). int i = Integer.parseInt([String]); 或
i = Integer.parseInt([String],[int radix]);
2). int i = Integer.valueOf(my_str).intValue();
3).int i=new Integer(String);
注: 字串转成 Double, Float, Long 的方法大同小异.
比较:第一种方法:i=Integer.parseInt(s);//直接使用静态方法,不会产生多余的对象,但会抛出异常
第二种方法:i=Integer.valueOf(s).intValue();//Integer.valueOf(s) 相当于 new Integer(Integer.parseInt(s)),也会抛异常,但会多产生一个对象。
4)另外,当不能使用API接口时,可利用下面方法:
for (int i = 0, len = string.length(); i < len; i++) {
char c=string.charAt[i];
if(c>='0' && c<='9'){
result = result * 10 + (int) (c - '0');
}
}
2 如何将整数 int 转换成字串 String ?
A. 有三种方法:
1.) String s = String.valueOf(i);
2.) String s = Integer.toString(i);
3.) String s = "" + i;
注: Double, Float, Long 转成字串的方法大同小异.
比较:第一种方法:s=i+""; //会产生两个String对象
第二种方法:s=String.valueOf(i); //直接使用String类的静态方法,只产生一个对象
--------------------------------------------------------------------
JAVA数据类型转换例子:
package com.www.xunfei;
//JAVA中常用数据类型转换函数
public class TypeChange {
public TypeChange() {
}
//change the string type to the int type
public static int stringToInt(String intstr)
{
int a=new Integer(intstr);
int b=Integer.valueOf(intstr).intValue();
int c=Integer.parseInt(intstr);//查看此源码实现
Integer integer;
integer = Integer.valueOf(intstr);
return integer.intValue();
}
public static int parseIntNoAPI(String s) {
if (s == null || s.equals(""))
throw new IllegalArgumentException("参数不能为null或空串!");
int result = 0;
for (int i = 0, len = s.length(); i < len; i++) {
char c = s.charAt(i);
if (c >= '0' && c <= '9') {
result = result * 10 + (int) (c - '0');
} else {
throw new IllegalArgumentException("s中只能包含数字");
}
}
return result;
}
//change int type to the string type
public static String intToString(int value)
{
String string=String.valueOf(value);
String string2=Integer.toString(value);
String string3=value+""; //会产生两个String对象
Integer integer = new Integer(value);
return integer.toString();
}
//change the string type to the float type
public static float stringToFloat(String floatstr)
{
Float float1=new Float(floatstr);
Float float2=Float.parseFloat(floatstr);
Float float3=Float.valueOf(floatstr).floatValue();
Float floatee;
floatee = Float.valueOf(floatstr);
return floatee.floatValue();
}
//change the float type to the string type
public static String floatToString(float value)
{
String string=String.valueOf(value);
String string2=value+"";
String string3=Float.toString(value);
Float floatee = new Float(value);
return floatee.toString();
}
//change the string type to the sqlDate type
public static java.sql.Date stringToDate(String dateStr)
{
return java.sql.Date.valueOf(dateStr);
}
//change the sqlDate type to the string type
public static String dateToString(java.sql.Date datee)
{
return datee.toString();
}
public static void main(String[] args)
{
java.sql.Date day ;
day = TypeChange.stringToDate("2003-11-3");
String strday = TypeChange.dateToString(day);
System.out.println(strday);
}
}
另外:Integer.parseInt(Str)的源码解析如下:
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
public static int parseInt(String s, int radix)
throws NumberFormatException
{
/*
* WARNING: This method may be invoked early during VM initialization
* before IntegerCache is initialized. Care must be taken to not use
* the valueOf method.
*/
if (s == null) {//如果字符串为空就直接抛出异常
throw new NumberFormatException("null");
}
if (radix < Character.MIN_RADIX) {//MIN_RADIX=2
throw new NumberFormatException("radix " + radix +
" less than Character.MIN_RADIX");
}
//jdk规定了进制的范围是2~36的范围
if (radix > Character.MAX_RADIX) {//MAX_RADIX=36
throw new NumberFormatException("radix " + radix +
" greater than Character.MAX_RADIX");
}
int result = 0;//存储最后返回的int值
boolean negative = false;//是否为负数,默认为false
int i = 0, len = s.length();//用i遍历s,max存储s的长度
int limit = -Integer.MAX_VALUE;//存储允许的int的范围,如:为负数,那么limit=Integer.MIN_VALUE
int multmin;
int digit;
if (len > 0) {
char firstChar = s.charAt(0);
if (firstChar < '0') { // Possible leading "+" or "-"
if (firstChar == '-') {
negative = true;
limit = Integer.MIN_VALUE;
} else if (firstChar != '+')
throw NumberFormatException.forInputString(s);
if (len == 1) // Cannot have lone "+" or "-"
throw NumberFormatException.forInputString(s);
i++;
}
multmin = limit / radix;
while (i < len) {
// Accumulating negatively avoids surprises near MAX_VALUE
digit = Character.digit(s.charAt(i++),radix);
if (digit < 0) {
throw NumberFormatException.forInputString(s);
}
//由于不是最后一位(i<max),因此如果result现在已经小于limit/radix,那么就可以直
//接判断超出Integer范围,而不用继续做下面比较复杂的判断了。
if (result < multmin) {
throw NumberFormatException.forInputString(s);
}
result *= radix;
if (result < limit + digit) {
//此处是该算法中最为精妙的地方,因为result此时肯定是合法的Integer值,而如果加
//digit后超出Integer范围,那么现在的result肯定不能小于limit+digit;其实这也是个
//比较简答的原理:因为result-digit必须大于limit,因为result自然就应该小于
//limit+digit了,如果不这样做,那么result怎么运算都会由于二进制码的表示得到
//Integer范围内的值,但实际可能已经超出Integer范围了。
throw NumberFormatException.forInputString(s);
}
result -= digit;
}
} else {
throw NumberFormatException.forInputString(s);
}
//这里可能比较多人奇怪:怎么是负数,返回result?其实这是因为前面已经做了处理了,
//这里的result已经是负数了。
//这主要是因为Integer的范围最小负数的绝对值比最大的正数要大(大1)的原因
return negative ? result : -result;
}
public static int digit(char ch, int radix)
-
返回使用指定基数的字符
ch
的数值。 -
eg: int x=Character.digit('c', 16); //x=12;
-
如果基数不在
MIN_RADIX
<=radix
<=MAX_RADIX
范围之内,或者ch
的值是一个使用指定基数的无效数字,则返回-1
。如果以下条件中至少有一个为真,则字符是一个有效数字:-
- 方法
isDigit
为true
,且字符(或分解的单字符)的 Unicode 十进制数值小于指定的基数。在这种情况下,返回十进制数值。 - 字符为
'A'
到'Z'
范围内的大写拉丁字母之一,且它的代码小于radix + 'A' - 10
。在这种情况下,返回ch - 'A' + 10
。 - 字符为
'a'
到'z'
范围内的小写拉丁字母之一,且它的代码小于radix + 'a' - 10
。在这种情况下,返回ch - 'a' + 10
。(这里我一点也看不懂)
digit(int, int)
方法。 - 方法
-
-
-
-
参数:
-
ch
- 要转换的字符。 -
radix
- 基数。
返回:
-
使用指定基数的字符所表示的数值。
-
-