我正在尝试解决一个java程序,我需要在每个单词中将特殊字符保留在同一个地方。 输入:String s =“为什么$ Java#很棒?” 输出:yhW $ avaJ sI#taerG?
我能够进行反向反转但不确定如何处理特殊字符。
答案 0 :(得分:1)
我不会给你代码,因为这可能是一个任务,在这种情况下你应该自己完成它,但这里是(一个)解决方案:
Pattern
和Matcher
使用正则表达式\w+
(连续字符)查找单个字词而不更改其他内容。index
和length
来获得该字所在的字符串中的索引范围,执行一个简单的循环交换该范围内字符的顺序。由于第一个循环处理找到每个单词(而没有别的),而第二个内循环处理单词(而不是其他单词),结果应该是你所期望的。
答案 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()将返回字符串反转。为了获得更好的性能和学习效果,请尝试使用字符串构建器而不是常规字符串。