Предположим, у меня есть предложение в строке X. Как я могу разделить каждое слово в предложении и добавить тег span для каждого слова с классом word
, а если слово совпадает со строкой y, добавить класс word selected
?
Оба X и y являются динамическими
String X = "The community is here to help you with specific coding, algorithm, or language problems."
String Y = "community, here"
Я создаю функцию и разбиваю на массив, но не могу добавить в построитель строк
private String setPType(String X , String Y){
String[] elements = Y.split(",");
String[] newElement = X.split(",");
StringBuilder sb = new StringBuilder();
sb.append("<p id=\"view\">");
sb.append("</p>");
return sb.toString();
}
Мой вывод должен выглядеть так
<p id = "view">
<span class = "word">The</span>
<span class = "word selected">community</span>
<span class = "word">is</span>
<span class = "word selected">here</span>
<span class = "word">to</span>
<span class = "word ">help</span>
</p>
Что, я думаю, вы можете добавить, но хотите ожидаемый результат?
В какой момент вы загружаете element и newElements в свой StringBuilder?
Что ж, вы получите желаемый результат только в том случае, если приложите усилия для циклического прохождения X-расщеплений и сопоставления их с набором Y-расщеплений.
Что здесь выглядит неправильно, так это то, что вы не добавляете ожидаемые значения, вместо этого ваша последняя строка: <p id = "view"></p>
. Попробуйте добавить его, например:
sb.append("<p id=\"view\">");
sb.append("abc");
sb.append("</p>");
Это: не добавляет новые строки, не принимает во внимание строки X
и Y
и, по сути, опускает весь код, который фактически решит вопрос OP.
Точно @Aplet123 ... Попробуйте поставить и это, но не проголосовали LOL
Я бы разделил x
по пробелам, транслировал их, обернул каждое слово его диапазоном, а затем присоединил его обратно. Для различия между выбранными и невыбранными словами я бы разделил y
, сохранил слова в Set
(строго не требуется, но должен повысить производительность, особенно при больших входных данных) и использовать это для проверки требуемого класса:
private static String setPType(String x , String y) {
Set<String> classifier = new HashSet<>(Arrays.asList(y.split(", ")));
return Arrays.stream(x.split(" "))
.map(w -> {
String cls = classifier.contains(w) ? "word selected" : "word";
return String.format("<span class=\"%s\">%s</span>", cls, w);
})
.collect(Collectors.joining("\n", "<p id=\"view\">\n", "\n</p>"));
}
«но я не могу добавить к построителю строк» Я ясно вижу, что ваш код добавляет строки к StringBuilder. Какова ваша настоящая проблема? Разве это не дает желаемого результата? Выдает ошибку?