如何以String形式级联负数

时间:2014-05-07 13:10:33

标签: java

例如,我有一个字符串“-234254365356”。现在我想获得最后4位数的符号,这样我就有了“-5356”。我该怎么做?

如何有效地为正整数做到这一点。

以下是我的代码。它适用于少数整数。但是,如果我开始以String形式输入大量的大整数,tt会返回错误。

我正在读取TXT文件,s变量是扫描仪。

 try{
        s = new Scanner(new BufferedReader(new FileReader(inputTxt)));

        while(s.hasNext()){
            ArrayList<Character> integer = new ArrayList<Character>();
             number = s.next();  
                int i = 0;
                if (number.charAt(0) == '-'){

                    integer.add(0, '-');  
                    while(i < 7){
                        i++; 
                        integer.add(number.charAt(number.length()-i));  
                    }
                }else{
                    while(i < 7){
                        integer.add(number.charAt(number.length()-1-i));
                        i++; 
                    }
                }

                String disectedInteger = getStringRepresentation(integer);  
                dataList.add(Integer.parseInt(disectedInteger)); 
                integer.clear(); 
        }

    }catch(FileNotFoundException e){
        e.printStackTrace(); 
    }catch(IOException e){
        e.printStackTrace(); 
    }catch(ArrayIndexOutOfBoundsException e){
        e.printStackTrace(); 
    }finally{
        if(s != null) s.close(); 
    } 

1 个答案:

答案 0 :(得分:0)

您的原始代码可简化如下:

    ArrayList<Character> integer = new ArrayList<Character>();        
    String number = s.next();

    if (number.charAt(0) == '-') {
        integer.add('-');
    }

    // Note: this assumes inputs are at least four characters long
    for (int i = number.length() - 4; i < number.length(); i++) {
        integer.add(number.charAt(i));
    }

更好的方法是放弃你的角色列表并转移到字符串构建器:

    String number = s.next();
    StringBuilder builder = new StringBuilder();        

    if (number.charAt(0) == '-') {
        builder.append('-');
    }

    builder.append(number.substring(number.length() - 4));
    int value = Integer.parseInt(builder.toString());

或者,正如评论中所建议的那样,您可以使用以下方法获得相同的最终结果:

Long.parseLong(number) % 10000

如果数字too large包含在long中,则此方法将失败。