回答
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
};
}
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显然没有想到它的一个库中有单行版本。 –
它看起来像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);
}
使用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(", ")
(注意空格)。
聪明。虽然看起来像代码高尔夫! – voidHead
感谢您将此添加为答案 –
在紧密循环或移动设备中,通过短暂的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
您可以通过使用在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
索尔的答案,可以更好地实现分束字符串是这样的:
string = string.replaceAll("[\\p{Z}\\s]+", "");
String[] array = string.substring(1, string.length() - 1).split(",");
- 1. 转换字符串转换成int()
- 2. 将字符串数组转换成int数组
- 3. 将字符串转换为Java中的int数组
- 4. 转换JSON字符串数组格式转换成Java中
- 5. 字符串到int数组转换c#
- 6. 将int转换为字符串数组
- 7. 将字符串转换为int数组
- 8. 转换字符串数组为int
- 9. 如何在Java中将int数组转换为base64字符串?
- 10. 使用数组在Java中将字符串转换为Int
- 11. 的JavaScript字符串转换成INT
- 12. 转换字符串数组在Java中
- 13. 字符串的PHP数组转换成int
- 14. 转换INT数组字符串数组中numpy的不截断
- 15. 将字符串转换为Java中的字符串数组
- 16. 转换INT字符转换成int不需要在Java
- 17. 转换的java字符串转换成JavaScript字符串
- 18. 解析字符串数组转换成int矩阵
- 19. 将一个字符串转换成INT
- 20. 将一个字符串转换成int
- 21. 如何将数字串转换为java中的int数组
- 22. 转换科学记数法字符串转换成int
- 23. 试图将字符串数组转换为Int数组的JSP
- 24. 如何字符串转换成数组
- 25. 转换成字符串数组highcharts JS
- 26. 将Java字符串转换为数组
- 27. 将Java字符串转换为数组
- 28. Ç字符转换成int
- 29. 转换INT [] []将字符串
- 30. 字符串转换成Java中
发布有效的Java实例。 –
这是一个家庭作业问题吗? –
您的示例代码不能编译。请修复它。也就是说,看看StringTokenizers:http://download.oracle.com/javase/6/docs/api/java/util/StringTokenizer.html –