在java中,只为句子中的字母而不是数字或特殊字符反转字符串
我想实现一种方法,在只反转句子中的字母在java中,只为句子中的字母而不是数字或特殊字符反转字符串,java,string,java-8,Java,String,Java 8,我想实现一种方法,在只反转句子中的字母[a-zA-Z]而不是数字或特殊字符后返回字符串。必须逐字逐句地倒转。例如:对于1个LCD的25000R,它应该是25000sr rof 1 DCL public class Main { static String reverseWords(String inputString) { String[] words = inputString.split(" "); String reverseString = "";
[a-zA-Z]
而不是数字或特殊字符后返回字符串。必须逐字逐句地倒转。例如:对于1个LCD的25000R
,它应该是25000sr rof 1 DCL
public class Main {
static String reverseWords(String inputString) {
String[] words = inputString.split(" ");
String reverseString = "";
for (int i = 0; i < words.length; i++)
{
String word = words[i];
String reverseWord = "";
for (int j = word.length()-1; j >= 0; j--)
{
reverseWord = reverseWord + word.charAt(j);
}
reverseString = reverseString + reverseWord + " ";
}
return reverseString;
}
public static void main(String[] args)
{
String str1 = "1 cup of hot coffee costs 8.00, whereas cold coffee costs 45.00.";
System.out.println(reverseWords(str1));
String str2 = "It Costs 25000rs for 1 LCD Projector.";
System.out.println(reverseWords(str2));
String str3 = "8990.33";
System.out.println(reverseWords(str3));
}
}
公共类主{
静态字符串反转记录(字符串输入字符串){
String[]words=inputString.split(“”);
字符串反向限制=”;
for(int i=0;i=0;j--)
{
reverseWord=reverseWord+字字符(j);
}
反向限制=反向限制+反向限制+“”;
}
返回反向限制;
}
公共静态void main(字符串[]args)
{
String str1=“一杯热咖啡的价格为8.00美元,而冷咖啡的价格为45.00美元。”;
System.out.println(reverseWords(str1));
String str2=“一台LCD投影仪的成本为25000卢比。”;
System.out.println(reverseWords(str2));
字符串str3=“8990.33”;
System.out.println(reverseWords(str3));
}
}
这是我想要的输出:
1临市局fo toh eeffoc标准件8.00,saerehw dloc eeffoc标准件45.00
tI stsoC 25000sr rof 1 DCL Rotchejorp
8990.33
这是我得到的输出:
1个临时市政局,00.8 saerehw dloc eeffoc stsoc.00.54
tI stsoC sr00052 rof 1 DCL.Rotchejorp
33.0998
您只需在空格字符处进行拆分,这使每个非空格字符序列都成为一个“单词” 此任务是正则表达式的
appendReplacement
/appendTail
循环的典型用例,当预期的替换逻辑太复杂,无法在字符串上进行简单替换时,您可以始终使用该循环:
static final Pattern WORD = Pattern.compile("\\pL+"); // class "L" means "letter"
static String reverseWords(String inputString) {
Matcher m = WORD.matcher(inputString);
if(!m.find()) return inputString;
StringBuffer sb = new StringBuffer(inputString.length());
do {
m.appendReplacement(sb, new StringBuilder(m.group()).reverse().toString());
} while(m.find());
return m.appendTail(sb).toString();
}
(从Java 9开始,此API还支持使用StringBuilder
而不是StringBuffer
)
但在这种特定情况下,也可以稍微提高操作效率:
static String reverseWords(String inputString) {
Matcher m = WORD.matcher(inputString);
if(!m.find()) return inputString;
StringBuilder sb = new StringBuilder(inputString);
do {
for(int ix1 = m.start(), ix2 = m.end() - 1; ix1 < ix2; ix1++, ix2--) {
sb.setCharAt(ix1, inputString.charAt(ix2));
sb.setCharAt(ix2, inputString.charAt(ix1));
}
} while(m.find());
return sb.toString();
}
staticstringreverseewords(stringinputstring){
Matcher m=WORD.Matcher(inputString);
如果(!m.find())返回inputString;
StringBuilder sb=新的StringBuilder(inputString);
做{
对于(intix1=m.start(),ix2=m.end()-1;ix1
您的问题是什么?我将此作为输出-“1 puc fo to h eeffoc stsoc,00.8 saerehw dloc eeffoc stsoc.00.54”而不是“1 puc fo to h eeffoc stsoc 8.00,saerehw dloc eeffoc stsoc 45.00”Pl.将其发布到您的问题上,以获得其他人的帮助。您得到的是什么输出以及您期望的是什么。这不是您使用此代码得到的输出。此代码完全吞没了非单词字符,因此它们不会出现在输出中。除此之外,new String(reverseString)等表达式
没有意义,因为reverseString
已经是字符串了。对不起,我的错。我发布了更新的代码。我试图解决问题,但在发布时没有意识到我对原始代码进行了更改。