【问题标题】:How do I grab the numbers in a String array and place them into an int array如何获取 String 数组中的数字并将它们放入 int 数组中
【发布时间】:2014-04-01 23:50:46
【问题描述】:

我有一个包含 {127,a,0,10} 的字符串数组。我想获取该数组中的数字并将它们放入一个 int 数组中,该数组现在将包含 {127,0,10}。

我尝试对字符串数组中的每个单独的值使用 parseInt,但它不适用于字符串中的字符。

谢谢!

【问题讨论】:

    标签: java arrays string int parseint


    【解决方案1】:

    Java 8 答案:

    int[] results = Arrays.stream(arr)
                        .filter(s -> s.matches("-?[0-9]+"))
                        .mapToInt(s -> Integer.parseInt(s))
                        .toArray();
    

    编辑:更好:

    int[] results = Arrays.stream(arr)
                        .filter(s -> s.matches("-?[0-9]+"))
                        .mapToInt(Integer::parseInt)
                        .toArray();
    

    展示又一个新的酷语言功能。我应该第一次看到这个。遗憾的是,尽管 Java 8 已经正式发布了整整两周,但我还没有掌握 Java 8。

    【讨论】:

    • Java 8 可能缺少一些映射方法,如果它们无法返回结果,它们能够从输出中排除元素。也许我们需要一个返回OptionalIntegerparseInt 版本,以及像mapToInt 这样的流映射方法,它适用于返回OptionalInt 并丢弃isPresent 为假的结果?然后我可以从管道中删除整个项目。
    【解决方案2】:

    验证 int 值

    您可以创建一个函数来告诉您字符串是否代表有效的 int 值:

    public static boolean isInteger(String s) {
        try { 
            Integer.parseInt(s); 
        } catch(NumberFormatException e) { 
            return false; 
        }
        // only got here if we didn't return false
        return true;
    }
    

    来源:Determine if a String is an Integer in Java

    删除不需要的元素

    您现在可以轻松地循环数组并删除不需要的元素:

    for(int i=0; i< myStringArray.length(); i++){
        if(!isInteger(myStringArray[i])){
            myStringArray[i]=null;
        }
    }
    

    【讨论】:

      【解决方案3】:

      我尝试对字符串数组中的每个单独值使用 parseInt 但它不适用于字符串中的字符。

      parseInt 不适用于字符,这是该 API 的设计。如果数值无效,它将抛出异常。所以你要做的就是将你的代码封装在 try/catch 中。并且在 NumberFormatException 的情况下不要将项目放在第二个数组中,否则添加。希望您能够编写此代码。

      【讨论】:

        【解决方案4】:

        试试这样的

        Integer[] numberArray = new Integer[stringArray.length];
        int index = 0;
        for(String s : stringArray) {
            try {
                Integer stringAsNumber = Interger.valueOf(s);
                numberArray[index] = stringAsNumber;
                index++;
            } catch(NumberFormatException nfe) {
                //String is not a valid number
            }
         }
         return numberArray;
        

        【讨论】:

          【解决方案5】:

          您可以使用正则表达式来确定字符串是否可以解析为整数。

          String [] arr = {"1233", "45", "a34", "/", "0", "19"};
          for(int i = 0; i < arr.length; i++)
              if(arr[i].matches("-?[0-9]+"))
                  System.out.println(arr[i]);
          

          其余的很容易做到。

          编辑:这会检测正数和负数。

          【讨论】:

          • 小心“asa123asda”字符串,它可能会破坏你的代码。更好地使用 ^ 和 $ 分隔符
          • 好主意,安全总是好的:)。虽然我找不到一个可以打破它的例子。不过,感谢您的建议,我更新了我的答案。
          • matches 始终要求匹配整个字符串。
          【解决方案6】:

          试试这个..

          import java.util.*;
          import java.lang.*;
          import java.io.*;
          import java.util.ArrayList;
          
          class Ideone
          {
              public static void main (String[] args) throws java.lang.Exception
              {
                  String[] var = new String[]{"127","a","0","10"};
                  List<Integer> var2 = new ArrayList<Integer>();
                      //Integer extraction
                  for (String s : var) 
                  {
                      try{
                          var2.add(Integer.parseInt(s));
                              System.out.println(Integer.parseInt(s));
          
                          }catch(NumberFormatException e){}
                  }
                      //int array if you want array only or you just use List<Integer>
                      int[] array = new int[var2.size()];
                      for(int i = 0; i < var2.size(); i++) array[i] = var2.get(i);
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2020-03-29
            • 2016-02-26
            • 1970-01-01
            • 2021-04-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多