我为以下代码获得了正确的输出。还有其他方法可以解决问题吗?
例如输入:海88您好输出: 88
package stringint;
import java.util.Scanner;
public class StringInt
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
String name = scan.nextLine();
name = name.replaceAll("[a-zA-Z]","@"); //replacing the
//alphabets to "@"
String[] array = name.split(" ");
for(int i = 0;i<array.length;i++)
{
if(!array[i].contains("@"))
{
System.out.println(array[i]);
}
}
}
}
答案 0 :(得分:1)
尝试一下,我什么都没替换
package stringint;
import java.util.Scanner;
public class StringInt
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
String name = scan.nextLine();
name = name.replaceAll("[\\D+]",""); //replacing all non-numeric char with nothing.
System.out.println(name);
}
}
我要做的就是用空字符串替换字母,然后将结果替换为变量name
而不是looping
。
这是上述code的有效示例。
答案 1 :(得分:0)
如果您输入的字符串类似于“ abc 12 @&!ab bb 54 n 2”,我将看不到正确的输出
在这种情况下,您还将获得除字母以外的所有其他多余字符。 尝试下面给出的此代码。希望对您有所帮助。
public static void main(String[] args)
{
String nam = "abc 12 @ &! ab bb 54 n 2";
Pattern p1=Pattern.compile("\\d");
Matcher m1= p1.matcher(nam);
List<String>listOfNumbr= new ArrayList<>();
boolean chck=true;
int start=0;
int end=0;
do{
if(chck==true){
chck=false;
if(m1.find()){
start=m1.start();
String sub=nam.substring(start);
Pattern p2=Pattern.compile("\\D");
Matcher m2= p2.matcher(sub);
if(m2.find()){
end=m2.start();
}else{
end=sub.length();
}
String numbr=sub.substring(0,end);
listOfNumbr.add(numbr);
nam=sub.substring(end);
m1=p1.matcher(nam);
}
}else{
start=m1.start();
String sub=nam.substring(start);
Pattern p2=Pattern.compile("\\D");
Matcher m2= p2.matcher(sub);
if(m2.find()){
end=m2.start();
}else{
end=sub.length();
}
String numbr=sub.substring(0,end);
listOfNumbr.add(numbr);
nam=sub.substring(end);
m1=p1.matcher(nam);
}
} while(m1.find());
for(String str:listOfNumbr){
System.out.println(str);
}
这将给出字符串中的所有数字值。
答案 2 :(得分:0)
我认为这样做更容易:
String name = "Hai 88 Hello";
String[] digits = name.split("\\D+");
List<Integer> nums = Arrays.stream(digits).filter(s -> !s.isEmpty()).map(Integer::valueOf).collect(Collectors.toList());
System.out.println(nums); //[88]