将电话号码中的所有字母转换为数字

时间:2016-12-11 00:35:46

标签: java

我试图用国际标准字母/数字映射用数字替换每个字母。我的输出正确运行但是,如何让电话号码中的破折号自动出现在输出中?例如,如果我输入1800Flowers,则打印出18003569377.如何在不使用正则表达式的情况下将其打印为1-800-3569377?

namespace HelloWebServer
{
    public partial class Program
    {
        GT.Networking.WebEvent sayHello;

    void ProgramStarted()
    {
        ethernet.UseDHCP();
        ethernet.NetworkUp += new GTM.Module.NetworkModule.NetworkEventHandler(ethernet_NetworkUp);
        ethernet.NetworkDown += new GTM.Module.NetworkModule.NetworkEventHandler(ethernet_NetworkDown);
        led.TurnBlue();
    }


    void ethernet_NetworkUp(GTM.Module.NetworkModule sender, GTM.Module.NetworkModule.NetworkState state)
    {
        led.TurnGreen();
        string ipAddress = ethernet.NetworkSettings.IPAddress;
        Debug.print("ip address"+ipAddress);
        WebServer.StartLocalServer(ipAddress, 80);
        sayHello = WebServer.SetupWebEvent("hello");
        sayHello.WebEventReceived += new WebEvent.ReceivedWebEventHandler(sayHello_WebEventReceived);
    }

    void sayHello_WebEventReceived(string path, WebServer.HttpMethod method, Responder responder)
    {
        string content = "<html><body><h1>Hello World!!</h1></body></html>";
        byte[] bytes = new System.Text.UTF8Encoding().GetBytes(content);
        responder.Respond(bytes, "text/html");
    }


    void ethernet_NetworkDown(GTM.Module.NetworkModule sender, GTM.Module.NetworkModule.NetworkState state)
    {
        led.TurnRed();
    }


}

预期产出: Output

1 个答案:

答案 0 :(得分:3)

您可以将正则表达式String.replaceAll一起使用。删除前导的一个,分组前三个数字,后三个数字和最后一组数字。像

这样的东西
public static String formatNumber(String phoneNumber) {
    if (phoneNumber.startsWith("1")) {
        phoneNumber = phoneNumber.substring(1);
    }
    return phoneNumber.replaceAll("(\\d{3})(\\d{3})(\\d+)", "1-$1-$2-$3");
}

public static String formatNumber(String phoneNumber) {
    return phoneNumber.replaceAll("1(\\d{3})(\\d{3})(\\d+)", "1-$1-$2-$3");
}

然后将其称为

System.out.println(formatNumber(getNumber(phoneNumber)));

我用1800flowers运行它并得到(正如预期的那样)

  

1-800-356-9377

没有像

这样的正则表达式
public static String formatNumber(String phoneNumber) {
    if (phoneNumber.startsWith("1")) {
        phoneNumber = phoneNumber.substring(1);
    }
    return "1-".concat(phoneNumber.substring(0, 3)) //
            .concat("-").concat(phoneNumber.substring(3, 6)) //
            .concat("-").concat(phoneNumber.substring(6));
}

在致电formatNumber之前,您可以使用类似

之类的内容删除破折号以规范化
public static String removeDashes(String phoneNumber) {
    StringBuilder sb = new StringBuilder();
    for (char ch : phoneNumber.toCharArray()) {
        if (ch != '-') {
            sb.append(ch);
        }
    }
    return sb.toString();
}

然后

System.out.println(formatNumber(removeDashes(getNumber(phoneNumber))));