如何检查一对是否已经存在?

时间:2016-04-08 16:27:47

标签: java

我有一个字符串说" abab"并且即成对分割。(即ab,ab)如果对已经存在,那么我不希望它被生成。我该怎么做 这是我尝试过的代码

      String r="abab";
      String  pair[] = new String[r.length()/2];
      for( int i = 0; i <pair.length; i++ ) 
      {
          pair[i] = r.substring(i*2,(i*2)+2);
      }

2 个答案:

答案 0 :(得分:1)

在将它添加到配对数组之前,您可以看到它是否已存在于数组函数.contains中。如果该对已经存在,则不要将其添加到配对列表中。例如,这里不会添加ab和fe对:

  String r="ababtefedefe";
  String  pair[] = new String[r.length()/2];
  String currentPair = "";
  for( int i = 0; i <pair.length; i++ ) 
  {
      currentPair = r.substring(i*2,(i*2)+2);
      if(!java.util.Arrays.asList(pair).contains(currentPair))
        pair[i] = currentPair;
      System.out.println(pair[i]);
  }

答案 1 :(得分:1)

我会用套装来帮助我。

private String[] retrieveUniquePair(String input) {
    int dim = input.length() / 2;
    Set<String> pairs = new LinkedHashSet<>(dim);

    for (int i = 0; i <= dim; i += 2) {
        String currentPair = input.substring(i, i + 2);
        pairs.add(currentPair);
    }

    return pairs.toArray(new String[] {});
}

修改 我发布了我提出的解决方案和测试

public class PairTest {

    @DataProvider(name = "input")
    public static Object[][] input() {
        return new Object[][] {
                {"abcd", Arrays.asList("ab", "cd")},
                {"abcde", Arrays.asList("ab", "cd")},
                {"abcdab", Arrays.asList("ab", "cd")},
                {"ababcdcd", Arrays.asList("ab", "cd")},
                {"ababtefedefe", Arrays.asList("ab", "te", "fe", "de")},
        };
    }

    @Test(dataProvider = "input")
    public void test(String input, List<String> expectedOutput) {
        String[] output = retrieveUniquePair(input);

        Assert.assertNotNull(output);
        Assert.assertEquals(output.length, expectedOutput.size());
        for (String pair : output) {
            Assert.assertTrue(expectedOutput.contains(pair));
        }
    }

    private String[] retrieveUniquePair(String input) {
        int pairNumber = input.length() / 2;
        Set<String> pairs = new LinkedHashSet<>(pairNumber);

        int endIteration = input.length();
        if (input.length() % 2 != 0) { // odd number
            endIteration--; // ignore last character
        }

        for (int i = 0; i < endIteration; i += 2) {
            String currentPair = input.substring(i, i + 2);
            pairs.add(currentPair);
        }

        return pairs.toArray(new String[pairs.size() - 1]);
    }
}