java去掉字符串的空格并放入数组中

问题是:我输入字符串r=“1 2 3 4 20”,这里面有不等长的空格,我现在要把里面的数字取出来保存在int[]里面,应该怎么做?试过r.splite(" ");可是只能删掉一个空格并保存为数组。用replace或trim又把所有空格删掉了我就无法判断这是几位数了。

这样?

public class string_int_tokens
{
    public static void main (String[] args)
    {
        String str = "1  2 3     4 20";
        String[] strArray = str.split("\\s{1,}");
        int[] intArray = new int[strArray.length];
        for (int i = 0; i < strArray.length; ++i) {
            intArray[i] = Integer.parseInt(strArray[i]);
        }        

        for (int k = 0; k < intArray.length; ++k) {
            System.out.println(intArray[k]);            
        }                        
    }
}

运行:

1
2
3
4
20

追问

是这样,可是有个小问题,就是如果输入是“ 1 2 3 4”,前面有空格就会报错。除了先trim()一下这种解决方法以外,能不能直接改进下正则表达式实现?

追答

① 先trim再split是最简单的方法。前有空格,修改正则也没用,因为这不是匹配。

② 修改成正则匹配,不如StringTokenizer来的简单,修改如下:

import java.util.*;
public class string_int_tokens
{
    public static void main (String[] args)
    {
        String str = " 1  2 3     4 20";
        StringTokenizer tokens = new StringTokenizer(str, " ");
        int[] intArray = new int[tokens.countTokens()];
        int index = 0;
        while(tokens.hasMoreTokens()){
            intArray[index] = Integer.parseInt(tokens.nextToken());
            ++index;
        }
        for (int i = 0; i < intArray.length; ++i) {
            System.out.println(intArray[i]);    
        }
    }
}

追问

thanks!

追答

You are welcome~

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-04
public class Test {
public static void main(String[] args) {
String s = "1 2 3 4 20";
String s2[] = s.split(" ");
int count=0; //用于统计不是空格的字符串数量,以便后面定义int数组长度
for(int i = 0;i<s2.length;i++) {
if(!(s2[i].equals(""))){ //遍历字符串数组,不是空格的输出并自加count
System.out.println(Integer.parseInt(s2[i]));
count++;
}

}
int a[] = new int[count]; //定义个数组长度为上面统计的
int f = 0;
for(int i = 0;i<s2.length;i++) {
if(!(s2[i].equals(""))){
a[f] =Integer.parseInt(s2[i]);//将不是空格的字符转换为int并赋值给整型数组,从第0个开始
f++;
}
}
for(int b:a) {
System.out.println(b);//输出整形数组
}
}
}
相似回答