0

我有一串国家缩写的注释,我想把它们分开,这样我就可以识别每个缩写的国家。这样我就有 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 (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("");

    }
}
4

7 回答 7

6

您需要将每个字符附加到您的字符串,然后进行比较,否则,它只会一直用最后一个字符替换您的字符串。

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");
}

过程的另一半也是如此。

c = ""; // re-initialize it to blank
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");
}

但最简单的方法是使用String.substring(startIndex, endIndex)它。

String c = x.substring(0,3); // For USA
String c1 = x.substring(3,6); // For IND
于 2013-11-05T05:50:21.377 回答
2

因为当你这样做时

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

第 i 个位置的字符存储在 c 中,因为它在 for 循环中,所以唯一可以存储的东西是“A”

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

c = x.substring(0,3); \\which would give you "USA"
于 2013-11-05T05:51:39.970 回答
1

您可能应该使用String.substring(...)它。

于 2013-11-05T05:50:27.807 回答
1

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

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

这应该是:

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

因为这会将当前字符迭代附加到整个字符串。用此修复替换片段,用于两个循环。该c变量将建立国家代码,并且这次将通过此条件:

if (c.equals("USA")) {

在第一个循环之后和第二个循环之前,您需要重新初始化c变量:

c = "";

完成后,您可以将该逻辑放入自己的方法中,从而避免循环中的重复代码。

String.substring正如其他人所指出的那样,可以通过使用来简化此逻辑,因为您使用String.charAt更繁琐的细节进行工作。我认为在给你其他指示之前指出你的逻辑错误是值得的。

因此,谈到其他方法,您可以尝试另一种方法来处理您的国家代码和名称控制台输出。尝试使用 a HashMap,其中键是国家代码,值是国家名称。HashMap您可以在之后迭代并打印出键和值。这对您当前的解决方案来说会更高级,并且代码会更短。

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

于 2013-11-05T06:14:59.077 回答
0

我会采取另一种方式,或者尝试添加一个终端符号,如“;”。如果这不可能,您可以检查String.contains("USA")是否设置了某个国家/地区。但请注意,您可能会发现一个未列出的国家/地区,因为其他两个国家/地区的组合。

于 2013-11-05T05:53:59.060 回答
0

根据您的逻辑,我认为使用起来会更好

public String substring(int beginIndex, int endIndex)

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

于 2013-11-05T05:55:59.273 回答
0

对于拆分部分,我会使用 Guava 的Splitter,如下所示:

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());
        }

    }
}

编辑:很抱歉使用第三方,对我来说似乎很干净。我同意使用子字符串的其他答案,但我更喜欢将所有内容视为一个进程而不是两个进程,因此您可以轻松拥有超过 2 个缩写的字符串,例如(假设 Enum 如上所述)

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());
    }

}
于 2013-11-05T06:29:24.960 回答