繁体   English   中英

JAVA中的单词末尾出现大写字母后如何反转单词?

[英]How to reverse the word after getting a Capital letter at the end of the word in JAVA?

假设您有一个字符串和一个大写字母,表示单词的结尾。 例如,如果您有 wElovEcakE,其中 E、E 和 K 分别表示单词 wE、lovE 和 cakE 的结尾。 您需要反转每个单词(因为您知道它在哪里结束)。 不要将整个字符串反转。 为了说明,如果我们将 wElovEcakE 作为输入 output 应该是 EwEvolEkac。 看到我们变成了 Ew,love 变成了 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
        }
    }
}

上面我在条件部分提到了“EMPTY”......我想运行一个循环,我的循环将工作到大写字母,然后我将计算所有我已经计算到大写字母的字母然后最后一步将就像我将创建另一个循环,我将反转所有字母,其中循环的条件将 <=count;Example:lovE(计算 4 个字母我将反转四次)。

如果您认为我的方法是正确的,你们能帮我在“EMPTY”部分写下条件吗?你们能帮我以其他方式解决问题吗?

这是一个使用 StringBuilder class 来保存和反转每个找到的单词的解决方案。

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();

例子

输入一个词:
制作EmorEpiE
EkamEromEip

测试这是否适合您:

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

    }
}
}

这是我使用正则表达式模式的解决方案

    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

你可以试试这个解决方案:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM