Разделите слово на две части и проверьте существование в последовательности строк, разделенных запятыми - PullRequest
1 голос
/ 13 апреля 2020

У меня есть строковый массив, например:

new String[] = {"powerhouse", "p, pow, power, house, pose, poser"};

Моя цель - разбить первую запись в массиве в этом случае powerhouse на любые два слова и сравнить их со второй записью, что служит словарем слов.

Вот моя реализация:

public static String[] convertWordsToArray(String input){
  String[] wordArr = null;
  wordArr = input.split(",");
  return wordArr;
}

public static String splitEm(String[] strArr) {
    String fw = strArr[0];
    String sw = strArr[1];

    String[] arrOne = convertWordsToArray(fw);
    System.out.println(arrOne.length);

    String[] dict = convertWordsToArray(sw);
    System.out.println(dict.length);

    for(int i = 0; i < dict.length - 1; i++) {
         String mWord = fw.split(i, i + 1);
         System.out.println(mWord);
    }

    // Edit Starts Here, tried to substring it but nothing prints in log
      for(int i = 0; i < arrOne.length; i++) {
        String mWord = fw.substring(0, i);
        System.out.println(mWord);
      }

    return ""; // empty for now
}

Я застрял в той части, где первое слово должно быть разделено. Должен ли я использовать два цикла, один для первого слова, а другой для словаря? Я знаю, что каким-то образом словарь должен быть преобразован в список или список массивов, чтобы использовать метод .contains(). Как я go об этом? Спасибо.

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Попробуйте это:

public class Stack {
    public static void main(String[] args) {

        String[] str = {"powerhouse", "p, pow, power, house, pose, poser"};
        String firstPart = str[0];
        String secondPart = str[1];
        boolean contain = isContain(firstPart, secondPart);
        System.out.println(contain);
    }

    private static boolean isContain(String firstPart, String secondPart) {

        for (int i = 0; i < firstPart.length(); i++) {
            String firstWord = firstPart.substring(0, i);
            String secondWord = firstPart.substring(i, firstPart.length());
            List<String> strings = Arrays.asList(secondPart.trim().split("\\s*,\\s*"));              
            if (strings.contains(firstWord) && strings.contains(secondWord)) return true; if you want to check both words use this
            //if (strings.contains(firstWord) || strings.contains(secondWord)) return true; if you want to check any(one) word from two words use this
        }
        return false;
    }
}
1 голос
/ 13 апреля 2020

Вам нужно что-то подобное?

String s = "powerhouse";
List<String> list = new ArrayList<String>();
for(int i = 0; i < s.length(); i++){
    for(int j = i+1; j <= s.length(); j++){
        list.add(s.substring(i,j));
    }
}

System.out.println(list);

Полагаю, вам нужно что-то вроде ниже:

  • Разделите вторую строку на каждом , или даже лучше, используя регулярные выражения для Обрезать пробелы до или после ,
  • , проверять, состоит ли каждая часть разделенной записи выше указанной точки только из символов, содержащихся в первой записи вашего ввода

пример

public static void main(String args[]) {
    String[] test1 = {"powerhouse", "p, pow, power, house, pose, poser"};
    String[] test2 = {"powerhouse", "p, xyz, power, house, pose, poser"};
    System.out.println(check(test1));
    System.out.println(check(test2));
}
static boolean check(String[] input){
    String firstEntry = input[0];
    String[] dictionary = input[1].split("\\s*,\\s*");
    for(int i = 0; i < dictionary.length; i++){
        if(!dictionary[i].matches("["+firstEntry+"]+")){
            return false;
        }
    }
    return true;
}

это будет печатать true для первого случая и false для второго, поскольку "xyz" не является допустимой подстрокой / подстрокой в ​​соответствии с вашим описанием

...