【问题标题】:Convert String to int array in java在java中将String转换为int数组
【发布时间】:2011-11-30 13:50:07
【问题描述】:

我有一个字符串

String arr= "[1,2]";

即“[1,2]”就像一个字符串

如何在java中将此arr转换为int数组

【问题讨论】:

  • 您的示例代码无法编译。请修复它。也就是说,看看 StringTokenizers:download.oracle.com/javase/6/docs/api/java/util/…
  • 你清楚你真正想做的事吗?
  • 为什么 8 票反对...??
  • 不明白为什么这个问题被否决了。非常清楚:将String 格式如下:[#,#,#,#,...,#] 转换为int[]
  • 有用、明确的问题,我需要在很久以后才能得到答案。到目前为止,超过 50K 的浏览量足以说明问题的质量。 +1。

标签: java arrays string


【解决方案1】:
String arr = "[1,2]";
String[] items = arr.replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\s", "").split(",");

int[] results = new int[items.length];

for (int i = 0; i < items.length; i++) {
    try {
        results[i] = Integer.parseInt(items[i]);
    } catch (NumberFormatException nfe) {
        //NOTE: write something here if you need to recover from formatting errors
    };
}

【讨论】:

  • 你先生,应该获得奖章!太感谢了!!我的字符串看起来像这样:[["1","2"],["11","5"]...]
  • 这很好用,我只需要添加 .replaceAll(" ", "") 因为我的字符串在数字之间有空格,例如 [1313, 1314, 1315] ,如果不替换空格我会得到我的 int[] [1313, 0, 0]
  • String[] items = arr.replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\s", "").split(","); 可以替换为 String[] items = arr.replaceAll("\\[|\\]|\\s|,", "") 刚刚完成我的正则表达式课程 :)
【解决方案2】:

使用 Java 8 的流库,我们可以使它成为一个单行(虽然很长):

String str = "[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]";
int[] arr = Arrays.stream(str.substring(1, str.length()-1).split(","))
    .map(String::trim).mapToInt(Integer::parseInt).toArray();
System.out.println(Arrays.toString(arr));

substring 删除括号,split 分隔数组元素,trim 删除数字周围的任何空格,parseInt 解析每个数字,然后我们将结果转储到数组中。我已包含trim 以使其与Arrays.toString(int[]) 相反,但这也将解析没有空格的字符串,如问题中所述。如果您只需要解析来自Arrays.toString 的字符串,则可以省略trim 并使用split(", ")(注意空格)。

【讨论】:

  • 感谢您将此添加为答案
【解决方案3】:
    final String[] strings = {"1", "2"};
    final int[] ints = new int[strings.length];
    for (int i=0; i < strings.length; i++) {
        ints[i] = Integer.parseInt(strings[i]);
    }

【讨论】:

  • 实现这一点的简洁方式。不过,我绝对感到失望的是,Java 显然没有为此考虑在其库之一中使用单行代码。
【解决方案4】:

它看起来像 JSON - 根据具体情况,它可能有点矫枉过正,但您可以考虑使用 JSON 库(例如 http://json.org/java/)来解析它:

    String arr = "[1,2]";

    JSONArray jsonArray = (JSONArray) new JSONObject(new JSONTokener("{data:"+arr+"}")).get("data");

    int[] outArr = new int[jsonArray.length()]; 

    for(int i=0; i<jsonArray.length(); i++) {
        outArr[i] = jsonArray.getInt(i);
    }

【讨论】:

    【解决方案5】:

    Saul 的回答可以更好地实现拆分字符串,如下所示:

    string = string.replaceAll("[\\p{Z}\\s]+", "");
    String[] array = string.substring(1, string.length() - 1).split(",");
    

    【讨论】:

      【解决方案6】:

      试试这个,可能对你有帮助

      String arr= "[1,2]";
      int[] arr=Stream.of(str.replaceAll("[\\[\\]\\, ]", "").split("")).mapToInt(Integer::parseInt).toArray();
      

      【讨论】:

      • 嗨,欢迎来到 StackOverflow。鉴于这是一个相当古老的问题,有很多流行的答案,请编辑您的问题以解释您的答案提供了现有答案所没有的内容。谢谢。
      • 您的答案不适用于"[123, 456]"等条目
      • 请立即查看!
      • 我认为@OlivierGrégoire 的意思是代码只有在每个元素都是单个数字时才有效。但它只需要一个小小的调整:Stream.of(str.replaceAll("[\\[\\]\\ ]", "").split(",")).mapToInt(Integer::parseInt).toArray()
      【解决方案7】:

      您可以使用 java.util 包中定义的 StringTokenizer 类轻松完成。

      void main()
          {
          int i=0;
          int n[]=new int[2];//for integer array of numbers
          String st="[1,2]";
          StringTokenizer stk=new StringTokenizer(st,"[,]"); //"[,]" is the delimeter
          String s[]=new String[2];//for String array of numbers
           while(stk.hasMoreTokens())
           {
              s[i]=stk.nextToken();
              n[i]=Integer.parseInt(s[i]);//Converting into Integer
             i++;
           }
        for(i=0;i<2;i++)
        System.out.println("number["+i+"]="+n[i]);
      }
      

      输出:-number[0]=1 数字[1]=2

      【讨论】:

        【解决方案8】:
            String str = "1,2,3,4,5,6,7,8,9,0";
            String items[] = str.split(",");
            int ent[] = new int[items.length];
            for(i=0;i<items.length;i++){
                try{
                    ent[i] = Integer.parseInt(items[i]);
                    System.out.println("#"+i+": "+ent[i]);//Para probar
                }catch(NumberFormatException e){
                    //Error
                }
            }
        

        【讨论】:

          【解决方案9】:

          在紧密循环中或在移动设备上,通过短暂的 String 对象生成大量垃圾并不是一个好主意,尤其是在解析长数组时。

          我的答案中的方法解析数据不会产生垃圾,但是它不能优雅地处理无效数据,也不能解析负数。 如果您的数据来自不受信任的来源,您应该进行一些额外的验证或使用其他答案中提供的替代方法之一。

          public static void readToArray(String line, int[] resultArray) {
              int index = 0;
              int number = 0;
          
              for (int i = 0, n = line.length(); i < n; i++) {
                  char c = line.charAt(i);
                  if (c == ',') {
                      resultArray[index] = number;
                      index++;
                      number = 0;
                  }
                  else if (Character.isDigit(c)) {
                      int digit = Character.getNumericValue(c);
                      number = number * 10 + digit;
                  }
              }
          
              if (index < resultArray.length) {
                  resultArray[index] = number;
              }
          }
          
          public static int[] toArray(String line) {
              int[] result = new int[countOccurrences(line, ',') + 1];
              readToArray(line, result);
              return result;
          }
          
          public static int countOccurrences(String haystack, char needle) {
              int count = 0;
              for (int i=0; i < haystack.length(); i++) {
                  if (haystack.charAt(i) == needle) {
                      count++;
                  }
              }
              return count;
          }
          

          countOccurrences implementation was shamelessly stolen from John Skeet

          【讨论】:

            【解决方案10】:
            String arr= "[1,2]";
            List<Integer> arrList= JSON.parseArray(arr,Integer.class).stream().collect(Collectors.toList());
            Integer[] intArr = ArrayUtils.toObject(arrList.stream().mapToInt(Integer::intValue).toArray());
            

            【讨论】:

              【解决方案11】:

              如果您更喜欢 Integer[] 而不是 int[] 数组的数组:

              整数[]

              String str = "[1,2]";
              String plainStr = str.substring(1, str.length()-1); // clear braces []
              String[] parts = plainStr.split(","); 
              Integer[] result = Stream.of(parts).mapToInt(Integer::parseInt).boxed().toArray(Integer[]::new);
              

              int[]

              String str = "[1,2]";
              String plainStr = str.substring(1, str.length()-1); // clear braces []
              String[] parts = plainStr.split(","); 
              int[] result = Stream.of(parts).mapToInt(Integer::parseInt).toArray()
              

              这适用于 Java 8 及更高版本。

              【讨论】:

                猜你喜欢
                • 2011-10-16
                • 1970-01-01
                • 2014-08-09
                • 1970-01-01
                • 2014-03-03
                • 1970-01-01
                • 1970-01-01
                • 2011-04-06
                相关资源
                最近更新 更多