Java从包含分隔符和范围符号的字符串中提取整数

时间:2014-11-19 12:05:49

标签: java string split

是否有一个库可以帮助我通过分隔符和范围标记将String拆分为整数? 例如

values="32,38,42-48,84"

输出:
int [] = 32,38,42,43,44,45,46,47,48,84

4 个答案:

答案 0 :(得分:1)

你可以使用字符串类的内置java函数,如split和contains来实现它。为了将字符串转换为int,请使用Integer.parseInt。 E.g。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class SimpleParser {

    public static void main(String[] args) {
        String input = "32,38,42-48,84";
        String[] chunks = input.split(",");

        System.out.println(Arrays.toString(chunks));
        List<Integer> ints = new ArrayList<>();
        for (String chunk : chunks) {
            if (chunk.contains("-")) {
                String[] rangeChunks = chunk.split("-");

                if (rangeChunks.length != 2) {
                    throw new IllegalArgumentException("Invalid range");
                }

                for (int i = Integer.parseInt(rangeChunks[0]); i <= Integer.parseInt(rangeChunks[1]) ; i++) {
                    ints.add(i);
                }

            }else {
                ints.add(Integer.parseInt(chunk));
            }
        }

        System.out.println(ints);
    }
}

输出

[32, 38, 42, 43, 44, 45, 46, 47, 48, 84]

答案 1 :(得分:0)

如果你想要的是获得整个范围(例如42-55),那么我并不完全确定,但你总是可以使用正则表达式找到所有不是数字的东西。表达式可以是"[^0-9]然后使用替换并通过某些字符(例如逗号)进行更改。然后用逗号分隔。请在这里阅读更多相关内容:http://www.vogella.com/tutorials/JavaRegularExpressions/article.html(注意:我与Vogella没有任何关系。我只是喜欢tuto :)。

编辑: 我现在可以看到你想要的输出(我认为不存在)。如果这是你想要的,那么先找到所有用逗号分割的。之后,检查您是否有符号的元素(例如),如果有,则按其拆分并使用数字创建范围。以下是工作代码的示例:

public static void main (String[] args) throws java.lang.Exception
{
    // your code goes here
    Scanner scan = new Scanner(System.in);
    String s = scan.nextLine();
    String[] splitted = s.split(",");
    for(int i = 0; i < splitted.length;i++){
        if(splitted[i].contains("-")){
            String[] nums = splitted[i].split("-");
            int from =  Integer.parseInt(nums[0]);
            int to = Integer.parseInt(nums[1]);
            for(int j = from;j <= to;j++)
                System.out.print(j+",");
        }
        else
            System.out.print(splitted[i] + ",");

    }

可能不是最有效的解决方案,但它确实有效。

答案 2 :(得分:0)

获取个别项目

//Creates an array of numbers (e.g. "32") and ranges (e.g. "42-48")
String[] items = String.split(",");

循环遍历数组并在范围标记存在的情况下拆分为范围

 if (items[i].contains("-")
 {
   //creates an array of two containing the start and end of range
   String[] ranges = items[i].split("-"); 
 }

然后对于数组中的每个String,解析出Integer

Integer parsedInt = Integer.parseInt(item[i]);

最后,将items转换并添加到ArrayList之类的集合,然后转换范围并循环遍历范围(42-48),同时将数字添加到集合中。< / p>

答案 3 :(得分:0)

我使用简单的String数组和arraylist作为解决方案:

String[] values_s = items.split(",")

List<Integer> values_i = new ArrayList<Integer>();

for(String s: values_s){

if ( s.contains('-') ){
   int sum = 0;
   String[] g = s.split("-");
   for (int i=Integer.parseInt(g[0]); i<Integer.parseInt(g[g.length-1]); i++)
       values_i.add(i);

} else {
  values_i.add(Integer.parseInt(s));
}

}

int[] n = (int[])values_i.toArray(int[values_i.size()]);

应该这样做。