簡體   English   中英

如何檢查一對已經存在?

[英]How to check if a pair already exists?

我有一個說“ 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);
      }

在將其添加到對數組之前,可以使用Arrays函數.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]);
  }

我會用一套幫助我。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM