我知道那里有类似的问题我已经尝试过很难实现它们但我似乎无法让它们满足我的需求。我不需要找到只是连续数字。我需要找到3个或更多的连续数字,并用连字符替换中间数字。
例如:
1,3,4,6,7,8,9
。输出应为1,3,4,6-9
。1,3,4,5,7,8,9
。输出应为1,3-5,7-9
。我遇到的问题是编写逻辑来区分1位,2位,3位或更多位数,以及3位或更多位的连续数字组。提前感谢您提供的任何帮助! : - )
答案 0 :(得分:2)
这是一种非常冗长的方式。这将创建一个新的数组列表,您可以从原始列表或范围中添加数字。它通过测试下一个条目是否大于当前条目以及该趋势持续多长时间来查找范围。如果连续至少有3个,则会添加范围并开始查看范围。否则,它只是添加每个数字。
List<String> altered = new ArrayList<>();
for(int i=0; i<list.size(); i++){
int start = i;
int size = 1;
int end = start;
if(i<list.size()-2){
end = start+1;
while(list.get(end) == list.get(end-1)+1){
size++;
end++;
if(end >= list.size())
break;
}
}
if(size >=3){
altered.add(list.get(start)+"-"+list.get(end-1));
i = end-1;
}
else
altered.add(""+list.get(i));
}
System.out.println(altered);