2011-06-02 156 views
5

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

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

回答

7

看起来像作业。所以,你可以按照下列步骤操作:

  • Trim两个字符串
  • Convert两个字符串到ArrayList中使用空格分隔符
  • Sort两个阵列数字
  • Compare两个数组
+1

它不是它的最后一年的项目,我正在重新练习。 – 2011-06-02 10:26:10

+3

@sibghatuk - 同样的原则适用。如果我们给你提示,并且你为自己找出完整的答案,你会**更多**。那就是你想要做的......不是吗? – 2011-06-02 10:33:52

-1

尝试解析int中的字符串。

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

我不知道你在做什么,但我的猜测是你最好使用数组。

+1

不能从空格的字符串解析为int - 你会得到一个'NumberFormatException' – Bohemian 2011-06-02 10:30:25

0

您可以根据空格对字符串进行标记化/拆分,然后遍历所得到的令牌,这些令牌本身就是数字。

4

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

0

你分割字符串在空白处(使用String.splitStringTokenizer),然后将其中的每一个e令牌成为一个数字。把所有的数字在字符串1中放入一个HashSet。对字符串2做同样的事情。现在,您只需检查第一个HashSet中的每个条目是否也出现在第二个条目中。

+0

MAK - OP提到重复的可能性。这意味着您的解决方案不会总是有效。 – 2011-06-02 10:36:11

+0

@Stephen C:的确如此。但他可以随时检查重复,而插入集。这个问题看起来像家庭作业,所以我不想放弃太多。 – MAK 2011-06-02 17:57:50

2

我不会对原始字符串进行比较。相反,首先将每个String转换为List<Integer>,每个结果使用String.split()Integer.parseInt()。然后将sort()列表按升序排列,然后将它们进行比较变得非常容易。

2

试试这个。

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); 
0

我将在第一个数作为整数分析,把它们设定并加以比较:

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