Java程序可以反转每个单词,特殊字符应保留在完全相同的位置

时间:2017-10-22 03:28:39

标签: java string split

我正在尝试解决一个java程序,我需要在每个单词中将特殊字符保留在同一个地方。 输入:String s =“为什么$ Java#很棒?” 输出:yhW $ avaJ sI#taerG?

我能够进行反向反转但不确定如何处理特殊字符。

4 个答案:

答案 0 :(得分:1)

我不会给你代码,因为这可能是一个任务,在这种情况下你应该自己完成它,但这里是(一个)解决方案:

  1. 使用PatternMatcher使用正则表达式\w+(连续字符)查找单个字词而不更改其他内容。
  2. 创建一个循环,您将使用步骤1中的设置来处理每个单词而不更改其他任何单词。
  3. 在循环内部,使用匹配indexlength来获得该字所在的字符串中的索引范围,执行一个简单的循环交换该范围内字符的顺序。
  4. 由于第一个循环处理找到每个单词(而没有别的),而第二个内循环处理单词(而不是其他单词),结果应该是你所期望的。

答案 1 :(得分:1)

使用堆栈的解决方案:

String s = "Why $Java Is# Great?";
    String Output= "yhW $avaJ sI# taerG?";
    StringBuilder sb1 = new StringBuilder();
    Stack<Character> stack = new Stack<>();
    for(int i=0; i<s.length();i++){
        char ch = s.charAt(i);
        if(!((ch >='a' && ch<='z') ||
            (ch >='A' && ch <='Z'))){
             while(!stack.isEmpty()){
                 sb1.append(stack.pop());
             }
             sb1.append(ch);
            }else{
                stack.push(ch);
            }
            }
            System.out.println(sb1.toString());
            System.out.println(sb1.toString().equals(Output));
        }

答案 2 :(得分:0)

java.lang.Character.isLetter(char ch)确定指定的字符是否为字母。

这是一个小伪代码

  

如果(!character.isLetter)不反转

希望有所帮助

答案 3 :(得分:0)

一个简单的解决方案是编写一个检查字符是否特殊的方法,例如:称之为isSpecialChar(),它返回一个布尔值。如果您对如何操作不熟悉,请使用ASCII值检查表示字符。这是非常基本和直截了当的。

您需要执行以下操作:检查字符,适当地附加到字符串。如果这是一个单词,你可以使用另一个辅助方法来反转它,例如,reverse()将返回字符串反转。为了获得更好的性能和学习效果,请尝试使用字符串构建器而不是常规字符串。

参考文献:How to get ASCII from char

About String builders