我只需要反转字符串中的字母,并使用Character.is字母
将符号和数字保持在相同的位置,并且我还需要保持反转单词的相同顺序。我的代码反转字符串并将符号和数字保持在适当的位置,但更改单词的顺序,例如:
我的输入字符串:
a1bcd efg!H
我的输出字符串:
h1gfe dcb!A.
相反,我的输出应该是:
d1cba hgf! e
class AnagramsMaker {
public static String createAnagram(String StringToReverse) {
char[] stringToChar = StringToReverse.toCharArray();
int arrayStart = 0;
int arrayEnd = stringToChar.length - 1;
while (arrayStart < arrayEnd) {
if (Character.isLetter(stringToChar[arrayStart]) && Character.isLetter(stringToChar[arrayEnd])) {
char temp = stringToChar[arrayStart];
stringToChar[arrayStart] = stringToChar[arrayEnd];
stringToChar[arrayEnd] = temp;
arrayStart++;
arrayEnd--;
}
else if (Character.isLetter(stringToChar[arrayStart]) && !Character.isLetter(stringToChar[arrayEnd])) {
arrayEnd--;
}
else if (!Character.isLetter(stringToChar[arrayStart]) && Character.isLetter(stringToChar[arrayEnd])) {
arrayStart++;
}
else {
arrayStart++;
arrayEnd--;
}
}
return String.valueOf(stringToChar);
}
}
这是python的解决方案。获取字符串开头和结尾的引用,然后检查它是否是字母表,然后增加引用
def reverse_only_letters(string):
l = 0
r = len(string)-1
a = list(string)
while l<r:
if a[l].isalpha() and a[r].isalpha():
temp = a[l]
a[l] = a[r]
a[r] = temp
l += 1
r -= 1
elif not a[l].isalpha():
l += 1
elif not a[r].isalpha():
r -= 1
return "".join(a)
String plain = "a1bcd efg!h";
String reversed = Arrays.stream(plain.split(" ")).map(str -> {
char[] chars = str.toCharArray();
int i = 0;
int j = chars.length - 1;
while(i < j) {
if(Character.isLetter(chars[i]) && Character.isLetter(chars[j])) {
char tmp = chars[i];
chars[i] = chars[j];
chars[j] = tmp;
i++;
j--;
} else if(!Character.isLetter(chars[i]))
i++;
else
j--;
}
return new String(chars);
}).collect(Collectors.joining(" "));
您可以通过利用java流来更解密地完成它。此代码的工作原理是跨过特殊字符并颠倒i
th和j
th字符的位置,如果它们都是有效字符。
按照当前的方式,实际上根本不需要修改方法,而是可以利用它来反转每个单词,而不是一次反转整个字符串。
我将您当前的方法重命名为
public静态String createAnagramWord(String StringToReverse)
,然后创建了下面的方法:
public static String createAnagram(String str) {
String anagram = "";
String [] arr = str.split(" ");
for (String s : arr) {
anagram += createAnagramWord(s) + " ";
}
return anagram;
}
在这里,我使用您当前的方法,其中包含
createAnagramWord
。
在这个方法中,请注意,我用
“
”在空格中拆分传递给它的字符串
(您也可以使用\\s
,请参阅本文),然后使用增强的for
循环迭代从拆分
返回的数组。
在
for
循环中,新的字符串
是通过在每个颠倒的单词后面加一个空格来创建的。
示例运行:
public static void main(String [] args) {
String reverse = "a1bcd efg!h";
System.out.println(createAnagram(reverse));
}
输出:
d1cba hgf! e
注意:
在循环中追加字符串
在技术上应该利用StringBuilder
,然而,我认为这超出了这个问题的范围,决定省略它。
此外,如果出于某种原因不想将逻辑分为两个不同的方法,可以将此逻辑改写为当前方法。
问题内容: 我的代码中有一个小问题。我正在尝试反转单词和字符串的字符。例如,“狗跑了”将变成“ ehT神纳尔” 该代码几乎可以正常工作。它只是不添加空格。你会怎么做? 问题答案: 您走在正确的轨道上。主要问题是一个空字符串,而不是一个空格(即使您解决了这个问题,您可能也不想在最后一个单词之后留一个空格)。 这是您可以更简洁地执行此操作的方法:
考虑这个例子,从0到10颠倒数字的顺序:<代码> 这以一种双重的方式颠倒了顺序。如果我输入100个从0到10的数字,它包含a 对于字典顺序,我需要同样的东西。我有一根固定长度为10的绳子。如何颠倒字典顺序? 如果它只包含,这将非常简单。但是它也可以包含数字和,并且区分大小写。 有人知道怎么做吗?
本文向大家介绍在JavaScript中反转字符串中的单词,包括了在JavaScript中反转字符串中的单词的使用技巧和注意事项,需要的朋友参考一下 问题 我们需要编写一个JavaScript函数,该函数接受代表一个句子的字符串。 我们的函数应该颠倒字符串中出现的单词的顺序,并返回新的字符串。 这意味着最后一个单词应该成为第一个,第二个最后一个应该成为第二个,依此类推。 示例 以下是代码- 输出结果
按字母顺序排序字符串中的字符。 使用扩展运算符(...),Array.sort() 和 String.localeCompare() 对 str 中的字符进行排序,使用 String.join('') 重新组合。 const sortCharactersInString = str => [...str] .sort((a, b) => a.localeCompare(b))
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例 1: 输入: "Let's take LeetCode contest" 输出: "s'teL ekat edoCteeL tsetnoc" 注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。 解法: /** * @param {string} s * @
问题内容: 我想按字母顺序比较上述两个字符串(在本例中为“ Project”,然后是“ Sunject”,因为“ P”在“ S”之前)。有谁知道如何用Java做到这一点? 问题答案: 可能需要或可能不需要。 如果需要本地化的字符串排序,请查看此链接。