要从输入的邮政编码中删除任何非数字字符,我使用正则表达式表示非数字=“\ D”。但该程序无法处理zipcode中的空白区域。例如每当输入“12 4-67_9”时,它将格式化的邮政编码打印为“12”而不是预期的“124679”。
import java.util.*;
import java.util.regex.*;
public class ZipCodeHandler {
static String zip,zip5,zip4;
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.println("Please enter the zip code: ");
zip=s.next();
//Regular expression for Non-digits
String regex="\\D";
String[] zip1=zip.split(regex);
StringBuilder builder = new StringBuilder();
for(int i=0;i<zip1.length;i++) {
builder.append(zip1[i]);
}
zip=builder.toString();
System.out.println("The formated zip code is: "+zip);
}
}
输出: 请输入邮政编码: 12 4-67_9 格式化的邮政编码是:12
答案 0 :(得分:2)
Scanner
个对象有一个分隔符。来自Javadoc for Scanner:
扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。
当您致电Scanner.next()
时,扫描仪会一直读取,直到它到达此分隔符,然后停止读取。如果您想要整行,请改用Scanner.nextLine()
。
有一种更简单的方法可以从字符串中删除与特定模式匹配的所有内容。 String.replaceAll()
将正则表达式作为其参数之一。您可以在一个相当可读的代码行中替换所有非数字:
line = line.replaceAll("\\D","");
您的程序将变为:
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("Please enter the zip code: ");
String line = s.nextLine();
line = line.replaceAll("\\D","");
System.out.println("The formatted zip code is: " + line);
}
答案 1 :(得分:1)
不要使用s.next(),而是尝试使用s.nextLine()。查看next()和nextLine()
的差异import java.util.*;
import java.util.regex.*;
public class ZipCodeHandler {
static String zip,zip5,zip4;
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.println("Please enter the zip code: ");
zip=s.nextLine();
//Regular expression for Non-digits
String regex="\\D";
String[] zip1=zip.split(regex);
StringBuilder builder = new StringBuilder();
for(int i=0;i<zip1.length;i++) {
builder.append(zip1[i]);
}
zip=builder.toString();
System.out.println("The formated zip code is: "+zip);
}
}