char、string和int的转化---java

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="123",求各位数之和为6.

    	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。如果以下条件中至少有一个为真,则字符是一个有效数字:

  •  
    • 方法 isDigittrue,且字符(或分解的单字符)的 Unicode 十进制数值小于指定的基数。在这种情况下,返回十进制数值。
    • 字符为 'A''Z' 范围内的大写拉丁字母之一,且它的代码小于radix + 'A' - 10。在这种情况下,返回ch - 'A' + 10
    • 字符为 'a''z' 范围内的小写拉丁字母之一,且它的代码小于radix + 'a' - 10。在这种情况下,返回ch - 'a' + 10(这里我一点也看不懂)
    注:此方法无法处理增补字符。若要支持所有 Unicode 字符,包括增补字符,请使用digit(int, int) 方法。

参数:
ch - 要转换的字符。
radix - 基数。
返回:

使用指定基数的字符所表示的数值。









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值