public class NumDemo1 { public static void main(String[] args) { System.out.println(getNums("12%@35e06*a&78")); //输出:[12,35,6,78] System.out.println(getNums("a5Bc24*A%90r#Q8^v")); //输出:[5,24,90,8] } public static List<Integer> getNums(String str){ int i,j,k; int flag=1,star = 0,end=0; ArrayList<Integer> array = new ArrayList<Integer>(); for (i=0;i<str.length();i++){ if (str.charAt(i)>='0'&&str.charAt(i)<='9'){ if(flag==1){ flag=0; star=i; }else{ end=i; String s =str.substring(star,end+1); int y = Integer.parseInt(s); array.add(y); flag=1; } } if (flag==0){ String s =str.substring(star); int y = Integer.parseInt(s); array.add(y); flag=1; } } return array; } }
时间: 2023-12-20 08:03:59 浏览: 21
这是一个 Java 程序,实现了从字符串中提取数字的功能。程序中定义了一个名为 `getNums` 的静态方法,它接受一个字符串作为参数,并返回一个整数列表。
方法中使用了循环遍历字符串中的每个字符,如果当前字符是数字,则将 flag 设为 0,表示正在处理数字;如果 flag 为 0,说明正在处理数字,如果当前字符不是数字,则将数字的起始位置和结束位置记录下来,然后将其转换为整数并添加到列表中,最后将 flag 设为 1,表示数字处理完毕。
如果循环结束后 flag 仍为 0,说明最后一个数字还没有处理完成,需要将其转换为整数并添加到列表中。
需要注意的是,程序中使用了 `substring` 方法来截取子字符串,并使用 `parseInt` 方法将字符串转换为整数。这两个方法都有可能抛出异常,因此应该在调用时进行异常处理。
相关问题
java编写一个方法getNums(),传入一个字符串,提取字符串中所有的数值并返回数值列表,多个连在一起的数字可视为一个数值public class NumDemo1 { public static void main(String[] args) { System.out.println(getNums("12%@35e06*a&78")); //输出:[12,35,6,78] System.out.println(getNums("a5Bc24*A%90r#Q8^v")); //输出:[5,24,90,8] } public static List<Integer> getNums(String str){ } }
可以使用正则表达式来实现,代码如下:
```
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NumDemo1 {
public static void main(String[] args) {
System.out.println(getNums("12%@35e06*a&78")); //输出:[12,35,6,78]
System.out.println(getNums("a5Bc24*A%90r#Q8^v")); //输出:[5,24,90,8]
}
public static List<Integer> getNums(String str){
List<Integer> result = new ArrayList<>();
Pattern pattern = Pattern.compile("\\d+"); //匹配数字
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
result.add(Integer.valueOf(matcher.group())); //将匹配到的数字转换成整数并添加到结果列表中
}
return result;
}
}
```
编写一个方法getNums(),传入一个字符串,提取字符串中所有的数值并返回数值列表,多个连在一起的数字可视为一个数值public class NumDemo1 { public static void main(String[] args) { System.out.println(getNums("12%@35e06*a&78")); //输出:[12,35,6,78] System.out.println(getNums("a5Bc24*A%90r#Q8^v")); //输出:[5,24,90,8] } public static List<Integer> getNums(String str){ }}
以下是实现getNums()方法的代码:
```java
import java.util.ArrayList;
import java.util.List;
public class NumDemo1 {
public static void main(String[] args) {
System.out.println(getNums("12%@35e06*a&78")); //输出:[12,35,6,78]
System.out.println(getNums("a5Bc24*A%90r#Q8^v")); //输出:[5,24,90,8]
}
public static List<Integer> getNums(String str){
List<Integer> nums = new ArrayList<>();
int start = -1;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (Character.isDigit(c)) { // 如果是数字
if (start == -1) { // 如果是数字序列的开始
start = i;
}
} else { // 如果不是数字
if (start != -1) { // 如果数字序列已经开始
nums.add(Integer.parseInt(str.substring(start, i)));
start = -1;
}
}
}
if (start != -1) { // 处理最后一组数字序列
nums.add(Integer.parseInt(str.substring(start)));
}
return nums;
}
}
```
代码中,我们使用一个变量 `start` 来记录当前数字序列的起始位置,遍历整个字符串,如果遇到数字,则判断是否已经开始数字序列,没有则设置 `start` 为当前位置;如果遇到非数字,则判断是否已经开始数字序列,有则将数字序列转换为整数,并加入到结果列表中,同时重置 `start`。最后,如果最后一组数字序列没有被处理,则需要将其加入到结果列表中。