zoukankan      html  css  js  c++  java
  • parseInt和valueOf

    。parseInt和valueOf
    。split

    static int parseInt(String s)
    将字符串参数作为有符号的十进制整数进行分析。 static Integer valueOf(int i) 返回一个表示指定的 int 值的 Integer 实例。 static Integer valueOf(String s) 返回保持指定的 String 的值的 Integer 对象。 从返回值可以看出他们的区别 parseInt()返回的是基本类型int 而valueOf()返回的是包装类Integer Integer是可以使用对象方法的 而int类型就不能和Object类型进行互相转换
    实战说明(加深)
    
    例1:
    
    int i1 = Integer.parseInt(36);    int i2 = Integer.parseInt(36);
    
    int i3 = Integer.valueof(36);     int i3 = Integer.valueof(36);
    
    例2:
    
    int i1 = Integer.parseInt(236);    int i2 = Integer.parseInt(236);
    
    int i3 = Integer.valueof(236);     int i4 = Integer.valueof(236);
    
    分别运行一下,可以发现例1,i1==i2,i3==i4,但是例2中i1==i2 ,而i3==i4 并不成立,这是因为parseInt返回的是一个有符号的Integer数值,而Valueof返回是一个实例,
    更根本原因是对象池中数字是一个8bit有符号型,也就是说,数字大小在-128--127之内,valueof对于相同的数字返回的id是一致的,但是超过了这个范围,就会新开辟一块区域,
    这就导致例2的情况出现,所以在比较大小之内是,需谨慎行事
    http://blog.sina.com.cn/s/blog_76671eeb0100ui23.html


    split
    http://www.cnblogs.com/mingforyou/archive/2013/09/03/3299569.html

    在java.lang包中有String.split()方法,返回是一个数组

    
    

    我在应用中用到一些,给大家总结一下,仅供大家参考:

    
    

    1、如果用“.”作为分隔的话,必须是如下写法,String.split("\."),这样才能正确的分隔开,不能用String.split(".");

    
    

    2、如果用“|”作为分隔的话,必须是如下写法,String.split("\|"),这样才能正确的分隔开,不能用String.split("|");

    
    

    “.”和“|”都是转义字符,必须得加"\";

    
    

    3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如,“acount=? and uu =? or n=?”,把三个都分隔出来,可以用String.split("and|or");

    
    

    使用String.split方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我们预期的结果。 

    
    

    我们看jdk doc中说明  

    
    

    public String[] split(String regex)

    
    

     Splits this string around matches of the given regular expression. 

    
    

    参数regex是一个 regular-expression的匹配模式而不是一个简单的String,他对一些特殊的字符可能会出现你预想不到的结果,比如测试下面的代码用竖线 | 分隔字符串,你将得不到预期的结果

    
    
    
    
    
    复制代码
       String[] aa = "aaa|bbb|ccc".split("|");
    
        //String[] aa = "aaa|bbb|ccc".split("\|"); 这样才能得到正确的结果
    
        for (int i = 0 ; i <aa.length ; i++ ) {
    
          System.out.println("--"+aa[i]); 
    
        } 
    复制代码
    
    
    
    
    

    用竖 * 分隔字符串运行将抛出java.util.regex.PatternSyntaxException异常,用加号 + 也是如此。

    
    
    复制代码
        String[] aa = "aaa*bbb*ccc".split("*");
    
        //String[] aa = "aaa|bbb|ccc".split("\*"); 这样才能得到正确的结果    
    
        for (int i = 0 ; i <aa.length ; i++ ) {
    
          System.out.println("--"+aa[i]); 
    
        }  
    复制代码
    
    
    
    
    

    显然, + * 不是有效的模式匹配规则表达式,用"\*" "\+"转义后即可得到正确的结果。

    
    

    "|" 分隔串时虽然能够执行,但是却不是预期的目的,"\|"转义后即可得到正确的结果。

    
    

    还有如果想在串中使用""字符,则也需要转义.首先要表达"aaaabbb"这个串就应该用"aaaa\bbbb",如果要分隔就应该这样才能得到正确结果,

    
    
    String[] aa = "aaa\bbb\bccc".split("\\");


    package javabasi;
    
    import java.util.Scanner;
    
    /**
     * 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
     * @author dlmu
     *
     */
    public class SumA {
        public static void main (String [] args){
            Scanner sc = new Scanner(System.in);
            String str = sc.next();
            String[]number = str.split("\+");
            int sum = 0;
            for (int i = 0; i < str.length(); i++){
                sum = sum + Integer.parseInt(number[i]);
            }
            System.out.println(sum);
        }
    
    }
    2+22+222+2222+22222
    提示异常,找不到错误
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
        at javabasi.SumA.main(SumA.java:18)
    找到错误了,是因为for循环中应该是number.length,因为已经把str用split分开,将数据存储到number中了。
    有错误不可怕,要一步一步调试错误。调试可以先用错误提示和debug定位,定位到具体细节再用System.out.println()逐句输出,逐个修正
     
     
     
    
    
    
     
  • 相关阅读:
    (easy)LeetCode 223.Rectangle Area
    (easy)LeetCode 205.Reverse Linked List
    (easy)LeetCode 205.Isomorphic Strings (*)
    (easy)LeetCode 204.Count Primes
    (easy)LeetCode 203.Remove Linked List Elements
    (easy)LeetCode 202.Happy Number
    (easy)LeetCode 198.House Robber
    (easy)LeetCode 191.Number of 1 Bits
    试题分析
    使用ADO.NET访问数据库
  • 原文地址:https://www.cnblogs.com/fthjane/p/4782923.html
Copyright © 2011-2022 走看看