Задать вопрос
@BlachHugh
Начинающий программист

Как выполнить анаграмму строки только для литералов на языке Java?

Как выполнить анаграмму строки только для литералов на языке Java?
Т.е. символы не являющиеся литералами должны оставаться на своей позиции.
  • Вопрос задан
  • 125 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
@BlachHugh Автор вопроса
Начинающий программист
public class Anagrams {
private static final String NON_LETTER_CHAR = "[^a-zA-Z]";

public static String CreateAnagrams(final String sentence) {
final String splitSentence[] = sentence.split(" ");
String anagramSentence = "";
for (int i = 0; i < splitSentence.length; i++) {

final String currentWord = splitSentence[i];
final char[] currentWordChar = currentWord.toCharArray();
final TreeMap nonLetterPosition = new TreeMap<>();

for (int j = 0; j < currentWordChar.length; j++) {
saveNonLetterPos(currentWordChar[j], nonLetterPosition, j);
}

final String onlyLetterWord = currentWord.replaceAll(NON_LETTER_CHAR, "");
String anagramWord = new StringBuffer(onlyLetterWord).reverse().toString();
anagramWord = insertNonLetterSymbol(nonLetterPosition, anagramWord);
anagramSentence = anagramSentence + " " + anagramWord;
}
return anagramSentence;
}

private static String insertNonLetterSymbol(TreeMap nonLetterPosition, String anagramWord) {
for (Map.Entry entry : nonLetterPosition.entrySet()) {
Integer position = entry.getKey();
char nonLetterSymbol = entry.getValue();
anagramWord = new StringBuffer(anagramWord).insert(position, String.valueOf(nonLetterSymbol)).toString();
}
return anagramWord;
}

private static void saveNonLetterPos(char ch, TreeMap nonLetterPosition, int j) {
if (!Character.isLetter(ch)) {
nonLetterPosition.put(j, ch);
}
}
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы