Java字符串spilter

Java字符串spilter,java,string,Java,String,我有一个国家缩写的字符串注释,我想把它们分开,这样我就可以识别每个缩写的国家。这样我就有了字符串c=USA;我将输出国家名称 目前它没有c=USA,只有A public class Example { public static void main(String[] args) { String x = "USAIND"; String c = ""; System.out.print("Country: "); for

我有一个国家缩写的字符串注释,我想把它们分开,这样我就可以识别每个缩写的国家。这样我就有了字符串c=USA;我将输出国家名称

目前它没有c=USA,只有A

public class Example {

    public static void main(String[] args) {
        String x = "USAIND";

        String c = "";
        System.out.print("Country: ");
        for (int i = 0; i < 3; i++) {

            c = Character.toString(x.charAt(i));
            System.out.print(c);
            if (c.equals("USA")) {
                System.out.println("United State of America");
            }
        }
        System.out.println("");
        System.out.print("Country: ");
        for (int i = 3; i < 6; i++) {

            c = Character.toString(x.charAt(i));

            System.out.print(c);
            if (c.equals("IND")) {
                System.out.println("India");
            }
        }
        System.out.println("");

    }
}

您需要将每个字符附加到字符串中,然后进行比较,否则,它将始终用最后一个字符替换字符串

for (int i = 0; i < 3; i++) {
    c += Character.toString(x.charAt(i)); // Appending all the characters one by one
}

System.out.print(c); // Printing the String c after all the characters are appending

if (c.equals("USA")) { // checking if its equal to USA
    System.out.println("United State of America");
}

您可能应该使用String.substring。。。因为当你这样做的时候

String c = x.substring(0,3); // For USA
String c1 = x.substring(3,6); // For IND
c = Character.toString(x.charAt(i));
第i个位置的字符存储在c中,由于它位于for循环中,因此唯一存储在那里的是“a”

使用子字符串而不是for循环和charAt


我想换一种方式,或者尝试添加一个终端符号,如;。如果不可能,您可以使用String.containsUSA检查是否设置了某个国家/地区。但是beaware你可能会发现一个国家没有被列入名单,因为另外两个国家的组合。

根据你的逻辑,我认为使用它会更好


获取开始索引和结束索引的子字符串并进行比较。当前您只是获取字符。使用当前实现,您必须将每个字符转换为字符串并追加

您正在遍历字符串,但由于此代码段,您只保留最后一个字符:

c = Character.toString(x.charAt(i));
这应该是:

c += Character.toString(x.charAt(i));
因为这会将当前字符迭代附加到整个字符串中。对于这两个循环,使用此修复程序替换代码段。c变量将建立国家代码,并且这次将通过此条件:

if (c.equals("USA")) {
在第一个循环之后和第二个循环之前,需要重新初始化c变量:

c = "";
一旦完成,您就可以将该逻辑放在它自己的方法中,从而避免循环中的重复代码

正如其他人指出的那样,当您详细处理更为繁琐的String.charAt时,可以使用String.substring来简化此逻辑。我认为指出你的逻辑错误是值得的,在给你其他的指示之前

所以,谈到其他方法,您可以尝试另一种方法来处理国家/地区代码和名称控制台输出。尝试使用HashMap,其中键是国家代码,值是国家名称。之后,您可以遍历HashMap并打印出键和值。这将比您当前的解决方案更高级,代码更短


EDIT1:我为最后一个建议提供了代码,但我删除了它,因为我意识到不鼓励为作业相关的问题提供代码。

对于拆分部分,我会使用番石榴,如下所示:

Splitter.fixedLength(3).split(x)
对于将缩写与全名匹配的部分,我将使用枚举而不是等号比较,这看起来有点干净。因此,一个可能的完整结果是:

public class Example {

    public static enum Country {

        USA("United States of America"), IND("India");

        String fullName;

        Country(String fullName) {
                this.fullName = fullName;
            }

        String getFullName() {
            return fullName;
        }

    };

    public static void main(String[] args) {
        String x = "USAINDUSAIND";
        for (String s : Splitter.fixedLength(3).split(x)) {
            System.out.println(Country.valueOf(s).getFullName());
        }

    }
}
编辑:很抱歉使用第三方,我觉得很干净。我同意使用substring的其他答案,但我更喜欢将所有内容都看作是一个过程,而不是两个过程,因此您可以很容易地得到一个包含两个以上缩写的字符串,例如假设如上枚举的示例

public static void main(String[] args) {
    String x = "USAINDUSAIND";
    for (int i = 0;i < x.length();i += 3) {
        System.out.println(Country.valueOf(x.substring(i, i + 3).getFullName());
    }

}

为什么单个字符等于USA或IND,请改用子字符串方法。USAIND.substring3.equalsIND或USAIND.substring0,3.equalsua我在这里看到的一件大事是c应该是一个StringBuilder,不是字符串。使用分隔符是一个好主意,但字符串。包含是一个非常坏的主意,因为这可能会发生RSAMAS RSA-南非和MAS是马来西亚,但如果您使用包含搜索SAM SAM-萨摩亚,它将返回true,这不是true我知道,这就是我已经遇到此问题的原因,但可能我的最后一句话不够清楚。谢谢你的例子。我的坏男人。。不清楚你想说什么…:我不是下行投票者,但使用substring0,3代替追加和循环更为慷慨。我想你应该把它处理掉。大多数情况下,许多用户包括一些知名用户;不要阅读完整答案,但最简单的方法是使用…-在编辑答案之前就已经建议过了。@camickr-2件事。首先,我帮助OP了解问题并解决它。给出更好的解决方案应该是次要的,因为OP可能对使用子字符串方法有限制。接下来,如果查看修订历史,您将知道编辑是在之前还是之后完成的。@camickr否答案可以重复。如果OP选择R.J s作为最佳答案,那么它应该包含所有可能的解决方案。另一个来自谷歌或任何其他参考资料的浏览者很可能只会看到最好的答案,如果最好的答案能告诉你更好的答案,那就更好了better@SubinJacob,看起来很可能是最好的答案——这就是他们的问题。我相信人们应该看看所有的答案,他们可能会学到一些东西。很多时候,人们会在一个答案被接受后再添加一个答案,但这并不意味着应该忽略它。对某些人来说更容易
y阅读一篇有2-3个独特答案的帖子,其中5个人提出相同的建议,但措辞略有不同。评论的目的是在现有答案中添加更多信息,如果您认为您可以使答案更好,而不是创建一个全新的答案。@camickr在降级之前检查时间安排。我怎么知道别人是否也在写同样的东西。我不接受心灵感应按摩。也许你会的@菜鸟,你比其他人晚了6分钟。但是,添加一点更值得注意的信息应该足以避免否决票,甚至获得赞成票:另一个答案早在发布之前就给出了。此外,如果在您键入时收到另一个答案,您会在键入时收到通知,因此您可以在填写答案之前检查该答案。@Sage投反对票是否足够!!!在撰写我的答案时,我没有加载其他答案??反正没关系。谢谢你给我一些建议。似乎人们真的对时间感兴趣。有趣的是,我投了反对票,因为人们更关注我,我总是留下评论,让人们知道我不像投了RJ的反对票的人。真的,用第三方软件包来做这么基本的事情吗?对不起,没有第三方软件包。只有基本编程
Splitter.fixedLength(3).split(x)
public class Example {

    public static enum Country {

        USA("United States of America"), IND("India");

        String fullName;

        Country(String fullName) {
                this.fullName = fullName;
            }

        String getFullName() {
            return fullName;
        }

    };

    public static void main(String[] args) {
        String x = "USAINDUSAIND";
        for (String s : Splitter.fixedLength(3).split(x)) {
            System.out.println(Country.valueOf(s).getFullName());
        }

    }
}
public static void main(String[] args) {
    String x = "USAINDUSAIND";
    for (int i = 0;i < x.length();i += 3) {
        System.out.println(Country.valueOf(x.substring(i, i + 3).getFullName());
    }

}