Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不使用split解析电话号码_Java - Fatal编程技术网

Java 不使用split解析电话号码

Java 不使用split解析电话号码,java,Java,我正在尝试为学校编写一个JAVA程序。它要求我们使用提供的类,避免使用split,并在不同部分之间解析一个电话号码,电话号码由:分隔 package aaronjonesprog1; public class AaronJonesProg1 { /** * @param args the command line arguments */ public static void main(String[] args) { A

我正在尝试为学校编写一个JAVA程序。它要求我们使用提供的类,避免使用split,并在不同部分之间解析一个电话号码,电话号码由:分隔

    package aaronjonesprog1;


public class AaronJonesProg1 {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
    {
        AJDissector phone = new AJDissector("1:919:882:5000");
        System.out.println(phone.getPhoneNumber());
        System.out.println(phone.getPhoneNumber(4));
        System.out.println(phone.getPhoneNumber(1));
        System.out.println(phone.getPhoneNumber(3));
        System.out.println(phone.getPhoneNumber(2));
    }
}
我的司机:

    package aaronjonesprog1;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Aaron
 */
public class AJDissector
{

    private String phoneColon;
    private int areaCode, preCode, number, countryCode, emptyNum;   

    public AJDissector(String phoneNum)
    {
        this.phoneColon         = phoneNum;
        int index0      = phoneNum.indexOf(":");
        int index1      = phoneNum.indexOf(":", index0);
        int index2      = phoneNum.lastIndexOf(":");

        this.countryCode    = Integer.parseInt(phoneNum.substring(0, index0));
        this.areaCode       = Integer.parseInt(phoneNum.substring(index0, index1));
        this.preCode        = Integer.parseInt(phoneNum.substring(index1, index2));
        this.number         = Integer.parseInt(phoneNum.substring(index2));
    }

    public String getPhoneNumber()
    {
        return this.phoneColon;
    }

    public int getPhoneNumber(int a)
    {
        switch (a) 
        {
            case 1:
                return this.number;
            case 2:
                return this.countryCode;
            case 3:
                return this.preCode;
            case 4:
                return this.number;
            default:
                return this.emptyNum;
        }
    }
}
我收到的错误是:

   Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:504)
    at java.lang.Integer.parseInt(Integer.java:527)
    at aaronjonesprog1.AJDissector.<init>(AJDissector.java:26)
    at aaronjonesprog1.AaronJonesProg1.main(AaronJonesProg1.java:18)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
有人能帮我理解我做错了什么吗?我不相信我用错了parseInt。我试图找出它,但我认为我的代码是正确的。有人能告诉我这里做错了什么吗?

请注意,substring方法在指定的索引(包括索引)处开始子字符串。从indexOf获得的值是:字符的索引。使用substring和indexOfchar、index时存在问题

在试图解析它们之前,打印出(或在调试器中检查)您获得的每个索引和子字符串,您将看到哪里出了问题

例如,在获取子字符串的AJDissector构造函数中,尝试:

System.out.println("substring 2 indexes: " + index0 + ", " + index1);
System.out.println("substring 2: " + phoneNum.substring(index0, index1));
对于每个索引,查看整个字符串,记住索引从0开始,在头脑中做子字符串的工作。

注意,substring方法从指定的索引(包括)开始子字符串。从indexOf获得的值是:字符的索引。使用substring和indexOfchar、index时存在问题

在试图解析它们之前,打印出(或在调试器中检查)您获得的每个索引和子字符串,您将看到哪里出了问题

例如,在获取子字符串的AJDissector构造函数中,尝试:

System.out.println("substring 2 indexes: " + index0 + ", " + index1);
System.out.println("substring 2: " + phoneNum.substring(index0, index1));

对于每个索引,请查看整个字符串,记住索引从0开始,在您的头脑中执行子字符串的工作。

还有另一种方法可以实现您的兴趣。您可以使用string.replace方法将其分解,或插入:符号。这里是另一个程序的示例

 outputString = outputString.replaceAll(",",",\n" + " " );
 outputString = outputString.replaceAll("\\{","\\{\n" +" ");
 outputString = outputString.replaceAll(":",": ");
 outputString = outputString.replaceAll("}",",\n}");
 StringTokenizer output2 = new StringTokenizer(outputString,", ",true);

这组替换字符串进行了一些奇怪的格式化,这对于解释本文的主题来说非常复杂,但是研究一下它,你就会明白了。要理解这一点,请参考java字符串api,有另一种方法可以满足您的兴趣。您可以使用string.replace方法将其分解,或插入:符号。这里是另一个程序的示例

 outputString = outputString.replaceAll(",",",\n" + " " );
 outputString = outputString.replaceAll("\\{","\\{\n" +" ");
 outputString = outputString.replaceAll(":",": ");
 outputString = outputString.replaceAll("}",",\n}");
 StringTokenizer output2 = new StringTokenizer(outputString,", ",true);

这组替换字符串进行了一些奇怪的格式化,这对于解释本文的主题来说非常复杂,但是研究一下它,你就会明白了。要理解这一点,请参考java字符串api,也许您应该进一步查看java api,可能是java.util.Scanner之类的内容

从javadocs:

一个简单的文本扫描程序,可以解析原语类型和字符串 使用正则表达式

扫描仪使用分隔符模式将其输入拆分为标记, 默认情况下与空白匹配。由此产生的代币可以是 使用不同的next转换为不同类型的值 方法


也许您应该进一步查看Java API,可能是类似于:Java.util.Scanner的内容

从javadocs:

一个简单的文本扫描程序,可以解析原语类型和字符串 使用正则表达式

扫描仪使用分隔符模式将其输入拆分为标记, 默认情况下与空白匹配。由此产生的代币可以是 使用不同的next转换为不同类型的值 方法


了解如何使用调试器并逐步完成代码。这是你能得到的最有价值的建议。我去调试了,它在我的代码中显示了一条绿线。然后我按了F5,它吐出了和上面一样的错误…?正如上面所说的,电话号码不是数字。是的,它们是由数字组成的,但这并不意味着它们是数字;它们很可能是字母A到J。事实上,公司确实在数字中使用字母。经常INT通常不善于存储它们……原因包括,即使将字母转换为数字,前导零在电话号码中也可能很重要;我认为最好将整个数字控制为字符串,但是由于赋值,我必须将它们转换为int。@Aaron您需要在代码中设置断点。通常,这是通过单击要暂停的行上代码区域的左边距来完成的。如果没有断点,执行将不会停止,因此调试将执行与运行相同的操作。了解如何使用调试器并逐步完成代码。这是你能得到的最有价值的建议。我去调试了,它在我的代码中显示了一条绿线。然后我按了F5,它吐出了和上面一样的错误…?正如上面所说的,电话号码不是数字。是的,它们是由数字组成的,但这并不意味着它们是数字;它们很可能是字母A到J。事实上,公司确实在数字中使用字母。经常INT通常在s处很差

对它们进行排序…原因包括,即使你将字母转换为数字,前导零在电话号码中也可能很重要。对;我认为最好将整个数字控制为字符串,但是由于赋值,我必须将它们转换为int。@Aaron您需要在代码中设置断点。通常,这是通过单击要暂停的行上代码区域的左边距来完成的。如果没有断点,执行将不会停止,因此调试将执行与run相同的操作。index0等于1 index1等于1 index2等于9,因此我使用的indexOf不正确,它会出现。谢谢别忘了将pb2q的答案标记为解决方案,因为这将帮助其他人解决同样的问题。我还在做作业。我还没有子字符串的东西来工作;但我正在寻找另一个答案,将util扫描器作为替代方案。我一把这东西弄好就给你打电话。谢谢index0等于1 index1等于1 index2等于9,所以我使用indexOf时会出现错误。谢谢别忘了将pb2q的答案标记为解决方案,因为这将帮助其他人解决同样的问题。我还在做作业。我还没有子字符串的东西来工作;但我正在寻找另一个答案,将util扫描器作为替代方案。我一把这东西弄好就给你打电话。谢谢StringTokenizer是您创建的函数吗?我使用了它并替换了我的其他东西;现在可以了。非常感谢!字符串标记器是API中的另一个java类,非常有用,您也应该了解它!阿伦,我在努力建立我的声誉你能给我的灵魂一支箭吗。ThanksI只有14个声誉,需要15个声誉。我之前试过这么做。StringTokenizer是你创建的函数吗?我使用了这个,并替换了我的其他东西;现在可以了。非常感谢!字符串标记器是API中的另一个java类,非常有用,您也应该了解它!阿伦,我在努力建立我的声誉你能给我的灵魂一支箭吗。ThanksI只有14个声誉,需要15个声誉。我早就试过了。