作为一个新的程序员,我正在处理一个问题,这个问题告诉我如何将一个10个int的数组转换成一个格式化的字符串电话号码,如下所示:(999)999-9999。我遇到Matcher错误/问题。
我试着把整数数组转换成一个字符串,然后创建一个匹配器,捕获分组,把这个数字分成前3个、后3个和后4个,但我不断收到错误,我不知道到底是哪里出错了,代码如下:
`import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.*;
public class Kata {
private final static String pattern = "(?<first>[0-9][0-9][0-9])+(?<second>[0-9][0-9][0-9])+(?<third>[0-9][0-9][0-9][0-9])";
private final static Pattern paddy = Pattern.compile(pattern);
public static Matcher match(String text){
var mitch = paddy.matcher(text);
mitch.find();
return mitch;
}//end method
public static String createPhoneNumber(int[] numbers) {
int space = 1;
return String.format("(%s)" + space + "%s-%s", partOne(numbers), partTwo(numbers), partThree(numbers));
}//end method
public static String partOne(int[] numbers){
String phoneNumber = numbers.toString();
return match(phoneNumber).group("first").strip();
}//end method
public static String partTwo(int[] numbers){
String phoneNumber = numbers.toString();
return match(phoneNumber).group("second").strip();
}//end method
public static String partThree(int[] numbers){
String phoneNumber = numbers.toString();
return match(phoneNumber).group("third").strip();
}//end method
}`
1条答案
按热度按时间kr98yfug1#
为什么你需要一个正则表达式呢?你已经有了所有的数字,现在你需要把它们放入你的字符串中。你需要哪些成分呢?
1.一个方法,它接受一个整型数、一个偏移量和一个长度的数组。它将把这些整型数连接成一个字符串返回
String.format
调用,添加圆括号和连字符,并使用%s
说明符插入数字部分。该方法可能如下所示:
然后你的字符串格式调用:
如果为每个调用提供
numbers
会让人感觉重复,那么你是对的。为了避免这种情况,你可以引入一个类PhoneNumber
,它期望构造函数中的int[] numbers
数组将其存储在一个字段中。然后,它可以公开一个方法formatPhoneNumber()
,该方法执行格式化并返回格式化的字符串。强制性XKCD:https://xkcd.com/1171/(以及Jeff Attwood的博客:https://blog.codinghorror.com/regular-expressions-now-you-have-two-problems/,尽管与此问题的相关性较低)