【问题标题】:Is there a way of traversing from string to int array and vice versa有没有办法从字符串遍历到 int 数组,反之亦然
【发布时间】:2014-03-08 18:45:41
【问题描述】:

在 Java 中,给定数组

int a[] = {1,2,3}

我可以通过Arrays.toString(a)得到

"[1,2,3]"

有没有一种同样方便的方法可以将此字符串返回到它的先行数组? 还是我必须遍历整个split、for-loop、parseInt 的东西?

更新

感谢大家的所有想法。我推出了自己的功能

String src[] = data.split("\\D+");//data is intArrayAsString: [1,2,3]
int[] nums = new int[src.length - 1];
int ndx = 0;
for (String s : src) {
  try {
    nums[ndx] = Integer.parseInt(s);
    ndx++;
  } catch (NumberFormatException e) {
  }
}
return nums;

注意:traverse 这个词似乎让一些人失望了。 “遍历”是指从字符串到 int 数组来回移动的能力。

【问题讨论】:

  • 对于遍历列表,您可以使用 listIterator ListIterator<Integer> iterator = Arrays.asList(a); 或者我没有测试过 new StringBuilder(Arrays.toString(a)).reverse().toString(); --> 但您将拥有 ]3,2,1[
  • 使用Integer(int wrapper) 而不是int,所以它有toString() 方法,可能会对你有所帮助。
  • 可以选择 JSON 吗? ;-)
  • 理论上可以将字符串解析为 JSON 并获得 Integer 对象的 Map。没有完全扭转局面。
  • (应该注意的是,如果打算将此数据用于通过网络发送/接收之类的操作,那么 JSON 是首选格式。JSON 编码器将生成与 @987654333 基本相同的字符串@ 用于int 的数组,并且还将无缝处理其他更复杂的数据布局。解码是包的一部分。)

标签: java arrays string


【解决方案1】:

据我所知,没有。

但是使用Split 很容易做到。

我刚做了这个,如果你不明白怎么做:

int[] arr = {1, 2, 3, 4};
String toString = Arrays.toString(arr);

System.out.println(toString);

// we know it starts with [ and ] so we skip it
String[] items = toString.substring(1, toString.length() - 1).split(",");
int[] arr2 = new int[items.length];
for (int i = 0; i < items.length; ++i)
{
    arr2[i] = Integer.parseInt(items[i].trim()); // .trim() because it adds the space and parseInt don't like spaces
}

System.out.println(Arrays.toString(arr2));

(免费改进,只是草稿)

【讨论】:

  • StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
【解决方案2】:

我不知道任何现有的方法,所以我给你写了我自己的版本:

import java.util.Arrays;


public class ArrayToString {

    public static void main(String[] args) {
        int a[] = {1,2,3};
        String serialized = Arrays.toString(a);
        System.out.println(serialized);

        int[] b = stringToIntArray(serialized);

        System.out.println(Arrays.toString(b));
    }

    private static int[] stringToIntArray(String serialized) {

        // remove '[' and ']'
        String raw = serialized.replaceAll("^\\[(.*)\\]$", "$1");

        // split by separators
        String[] splitStrings = raw.split(", ");

        // create new int array
        int[] b = new int[splitStrings.length];
        for (int i = 0; i < splitStrings.length; i++) {
            String splitString = splitStrings[i];

            // parse each text individually
            b[i] = Integer.parseInt(splitString);
        }
        return b;
    }

}

【讨论】:

    猜你喜欢
    • 2011-02-24
    • 2011-07-02
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 2012-03-10
    • 2015-12-09
    • 2014-11-18
    相关资源
    最近更新 更多