Сравните две строки целых в Java - PullRequest
5 голосов
/ 02 июня 2011

У меня есть две строки, которые содержат числа, и я хочу посмотреть, содержит ли вторая строка те же числа, что и первая строка, независимо от того, в порядке они или нет.Если у него есть повторяющееся число, сообщите об ошибке.Есть ли в Java, кроме использования .charAt (), потому что он не работает для числа после 10?

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

Ответы [ 8 ]

7 голосов
/ 02 июня 2011

Похоже на домашнюю работу. Таким образом, вы можете выполнить следующие шаги:

4 голосов
/ 02 июня 2011

Вы можете использовать Scanner.nextInt(), чтобы прочитать числа из строки, добавить их к Set и посмотреть, истинно ли set1.equals(set2).

2 голосов
/ 02 июня 2011

Попробуй вот так.

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);
2 голосов
/ 02 июня 2011

Я бы не стал сравнивать необработанные строки.Вместо этого сначала преобразуйте каждый String в List<Integer>, используя String.split() и Integer.parseInt() для каждого результата.Затем sort() списки в порядке возрастания, а затем их становится очень легко сравнивать.

0 голосов
/ 02 июня 2011

Сначала я бы проанализировал числа как целые числа, поместил их в набор и сравнил их:

  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;
    }
}
0 голосов
/ 02 июня 2011

Вы разбиваете строки на пустое пространство (используя String.split или StringTokenizer) и затем конвертируете каждый из токенов в число. Поместите все числа в первой строке в HashSet. Сделайте то же самое для второй строки. Теперь все, что вам нужно сделать, это проверить, присутствует ли каждая запись в первом HashSet во втором.

0 голосов
/ 02 июня 2011

Вы можете токенизировать / разбивать строки на основе пробелов, а затем перебирать получившиеся токены, которые будут самими числами.

0 голосов
/ 02 июня 2011

Попробуйте разобрать строки в int.

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

Я не уверен, что вы пытаетесь сделать, но я думаю, что вам лучше использовать массивы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...