是否有一个库可以帮助我通过分隔符和范围标记将String拆分为整数? 例如
values="32,38,42-48,84"
输出:
int [] = 32,38,42,43,44,45,46,47,48,84
答案 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()]);
应该这样做。