Как поменять слово после получения заглавной буквы в конце слова в JAVA? - PullRequest
1 голос
/ 04 ноября 2019

Предположим, у вас есть строка и заглавная буква, обозначающая конец слова. Например, если у вас есть wElovEcakE, где E, E и K указывают конец слов wE, lovE и cakE соответственно. Вам нужно поменять местами каждое слово (как вы знаете, где оно заканчивается). Не переворачивайте строку в целом. Для иллюстрации, если мы дадим wElovEcakE в качестве входных данных, то должен быть EwEvolEkac. Видите, мы стали Ew, любовь стала Evol и так далее ...

И то, как я пытался приблизиться с ..

import java.util.Scanner;

public class Alternative {

    public static void main(String[]args) {

        Scanner robo=new Scanner (System.in);
        System.out.println("Enter  a word ");
        String word=robo.nextLine();
        char[] array=word.toCharArray();
        for(int i =0;i<array.length;i++){
            int count =0;
            for(int j=0;j<=("EMPTY");j++)  // here i am trying to operate a loop where it will work up to the Capital letter.
                count ++; 
            }
 //Code incomplete
        }
    }
}

Выше я упомянул "ПУСТО" в условиичасть ... я хочу использовать цикл, где мой цикл будет работать до заглавной буквы, затем я буду считать все буквы, которые я пересчитал до заглавной буквы, тогда последний шаг будет таким, как будто я сделаю еще один цикл, где я будупереверните все буквы, где условие для цикла будет <= count; Пример: lovE (отсчитав 4 буквы, я вернусь четыре раза назад). </p>

Можете ли вы, ребята, помочь мне написать условие в части "EMPTY", еслиВы думаете, что мой подход верен .. Можете ли вы, ребята, помочь мне решить проблему любым другим способом?

Ответы [ 5 ]

0 голосов
/ 04 ноября 2019

Вы можете попробовать это решение:

String textInvert = "wElovEcakE";
String revertText = textInvert
      .chars().mapToObj(c -> (char) c)
      .reduce(new LinkedList<>(Arrays.asList(new StringBuilder())), (a, v) -> {
          a.getLast().append(v);
          if (Character.isUpperCase(v)) {
              a.add(new StringBuilder());
          }
          return a;
      }, (a1, a2) -> a1)
      .stream()
      .map(s -> s.reverse())
      .reduce(StringBuilder::append)
      .map(StringBuilder::toString)
      .get();

System.out.println(revertText);
0 голосов
/ 04 ноября 2019

Вот мое решение с шаблоном Regex

    String[] in = "wElovEcakE".replaceAll("([A-z]+?[A-Z])","$1,").replaceAll(",$","").split(",");
    String out = "";
    for(String current: in){
        StringBuilder temp = new StringBuilder(); 
        temp.append(current);
        out+=temp.reverse();
    }
    System.out.println(out);

Результат:

EwEvolEkac
0 голосов
/ 04 ноября 2019

проверить, работает ли это для вас:

Scanner robo = new Scanner (System.in);
System.out.println("Enter  a word ");
String word = robo.nextLine();
String textInvert = "";
int indexAnt = 0;
for (int i = 0; i < word.length(); i++) {
    if (Character.isUpperCase(word.charAt(i))) {
        String wordSplit = word.substring(indexAnt, i + 1);
        for (int j = wordSplit.length() - 1; j >= 0; j--)
            textInvert += wordSplit.charAt(j);
        indexAnt = i + 1;
    }
}
System.out.println(textInvert);
0 голосов
/ 04 ноября 2019
public class Alternative {
public static void main(String[] args) {

    Scanner robo = new Scanner(System.in);

    System.out.println("Enter  a word ");
    String word = robo.nextLine();
    char[] array = word.toCharArray();
    int count = -1;
    for (int i = 0; i < array.length; i++) {

        if (Character.isUpperCase(array[i])) { //find the upper case letters in the word
            for (int j = i; j > count; j--) //loop through the letters until the last count variable value is encountered
                System.out.print(array[j]); //print the reversed values
            count = i; //assign the last encountered uppercase letter's index value to count variable
        }

    }
}
}
0 голосов
/ 04 ноября 2019

Вот решение, которое использует класс StringBuilder для хранения и обращения каждого найденного слова.

Scanner robo = new Scanner (System.in);
System.out.println("Enter a word:");
String word = robo.nextLine();
robo.close();
String upperCase = word.toUpperCase(); //used to find uppercase letters

StringBuilder builder = new StringBuilder();
for (int i = 0; i < word.length(); i++) {
    char nextChar = word.charAt(i);
    builder.append(nextChar);
    if (nextChar == upperCase.charAt(i)) {
        String subWord = builder.reverse().toString();
        System.out.print(subWord); //It's not clear what to do with the found words
        builder = new StringBuilder();
    }
}
System.out.println();

Пример

Введите слово:
makEmorEpiE
EkamEromEip

...