【问题标题】:Compare two strings of ints in java比较java中的两个整数字符串
【发布时间】:2011-06-02 10:18:15
【问题描述】:

我有两个包含数字的字符串,我想看看第二个字符串是否包含与第一个字符串相同的数字,它们是否按顺序排列。如果它有任何重复的数字而不是报告错误。除了使用 .charAt() 因为它不适用于 10 之后的数字之外,java 中还有其他方法吗?

String one = "1 2 3 4 5 "; 
String two = " 3 2 1 4 5 ";
String three = "3 2 1 4 4 "; 

【问题讨论】:

    标签: java string compare


    【解决方案1】:

    看起来像家庭作业。因此,您可以按照以下步骤操作:

    • Trim 两个字符串
    • Convert 使用空格分隔符将两个字符串都放入 ArrayList
    • Sort 两个数组都是数字
    • Compare 两个数组

    【讨论】:

    • 它不是家庭作业,它是我正在再次练习的去年项目。
    • @sibghatuk - 同样的原则也适用。如果我们为您提供提示并且您自己制定完整的答案,您将了解更多信息。这就是你想要做的......不是吗?
    【解决方案2】:

    您可以使用Scanner.nextInt() 从字符串中读取数字,将它们添加到Set,然后查看set1.equals(set2) 是否为真。

    【讨论】:

      【解决方案3】:

      我不会对原始字符串进行比较。相反,首先在每个结果上使用String.split()Integer.parseInt() 将每个String 转换为List<Integer>。然后sort()列表升序排列,比较起来就很容易了。

      【讨论】:

        【解决方案4】:

        像这样试试。

        String one = "1 2 3  4 5 ";
        String two = " 3 2 1 4 5 ";
        Set<String> a = new HashSet<String> (Arrays.asList(one.trim().replaceAll("\\s*"," ").split(" ")));
        Set<String> b = new HashSet<String> (Arrays.asList(two.trim().replaceAll("\\s*"," ").split(" ")));
        boolean ret = (a.size() == b.size()) && a.containsAll(b);
        

        【讨论】:

          【解决方案5】:

          您可以根据空格对字符串进行标记/拆分,然后遍历生成的标记,这些标记将是数字本身。

          【讨论】:

            【解决方案6】:

            您将字符串拆分为空格(使用String.splitStringTokenizer),然后将每个标记转换为一个数字。将字符串一中的所有数字放入HashSet。对字符串 2 执行相同的操作。现在您要做的就是检查第一个HashSet 中的每个条目是否也出现在第二个中。

            【讨论】:

            • MAK - OP 提到了重复的可能性。这意味着您的解决方案并不总是有效。
            • @Stephen C:是的。但他总是可以在插入集合时检查重复项。这个问题看起来像家庭作业,所以我不想放弃太多。
            【解决方案7】:

            我首先会将数字解析为整数,将它们放入集合中并进行比较:

              import java.util.SortedSet;
            import java.util.StringTokenizer;
            import java.util.TreeSet;
            
            
            public class StringsCompare {
            
                private static String one = "1 2 3 4 5 6"; 
                private static String two = " 3 2 1 5 6 4 ";
            
                public static void main(String[] args) {
                    StringsCompare sc = new StringsCompare();
            
                    System.out.println(sc.compare(one, two));
                }
            
                private boolean compare(String one, String two) {
            
                    SortedSet<Integer> setOne = getSet(one);    
                    SortedSet<Integer> setTwo = getSet(two);
            
                    return setOne.equals(setTwo);
                }
            
                private SortedSet<Integer> getSet(String str) {
                    SortedSet<Integer> result = new TreeSet<Integer>();
            
                    StringTokenizer st = new StringTokenizer(str, " ");
            
                    while (st.hasMoreTokens()) {
                        result.add(Integer.valueOf(st.nextToken()));
                    }
            
                    return result;
                }
            }
            

            【讨论】:

              【解决方案8】:

              尝试解析int中的字符串

              Integer.parseInt(One).intValue() == Integer.parseInt(two).intValue()
              

              我不确定你想做什么,但我猜你最好使用数组。

              【讨论】:

              • 你不能从一个包含空格的字符串中解析一个 int - 你会得到一个NumberFormatException
              猜你喜欢
              • 2020-04-24
              • 1970-01-01
              • 2012-08-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-06-19
              • 2012-02-08
              • 1970-01-01
              相关资源
              最近更新 更多