Java 如何(单独)反转字符串中的每个单词?
Java专家需要您的帮助 今天我在一次采访中被问到了这个问题,但我无法解决。 所以我需要一个解决方案,我应该如何解决这个问题 反转字符串Java 如何(单独)反转字符串中的每个单词?,java,string,reverse,Java,String,Reverse,Java专家需要您的帮助 今天我在一次采访中被问到了这个问题,但我无法解决。 所以我需要一个解决方案,我应该如何解决这个问题 反转字符串 Input : Hello, World! Output : olleH, dlroW! 在这种情况下,字母数字颠倒,其余部分保留在相同的位置,这意味着逗号和感叹号保留在相同的位置 您只能使用4个字符串函数来获得答案 查拉特(c) 长度() 塞查拉特(i,c) 布尔isAlphaNumeric() 我尝试了以下代码 public void String(S
Input : Hello, World!
Output : olleH, dlroW!
在这种情况下,字母数字颠倒,其余部分保留在相同的位置,这意味着逗号和感叹号保留在相同的位置
您只能使用4个字符串函数来获得答案
public void String(String str){
String temp;
for(int i=str.length-1;i>=0;i--){
temp = temp + str.charAt(i);
}
}
但是上面的代码会反转整个字符串。首先使用
str.split(“[^a-zA-Z]”)将字符串拆分为单词。
然后循环遍历数组,并像上面那样反转每个部分。最后,再次将字符串连接在一起。要按顺序获得分隔符数组,只需使用str.split('[a-zA-Z]')
例如:
String[] words=str.split('[^a-zA-Z]');
String[] separators=str.split('[a-zA-Z]');
//Left as an exercise: reverse each element of the words array (as you did in the original question)
int offset=0;
//Left as an exercise: If the sentence starts with punctuation, increment offset by one and insert the punctuation at the beginning
StringBuilder sb = new StringBuilder();
for(int i=0;i<words.length;i++)
{
sb.append(words[i]);
if(i+offset<separators.length)
{
sb.append(separators[i+offset]);
}
}
String[]words=str.split(“[^a-zA-Z]”);
字符串[]分隔符=str.split('[a-zA-Z]');
//左为练习:反转单词数组的每个元素(如您在原始问题中所做的那样)
整数偏移=0;
//左作为练习:如果句子以标点符号开头,则按1递增偏移量,并在开头插入标点符号
StringBuilder sb=新的StringBuilder();
对于(int i=0;i,首先使用str.split(“[^a-zA-Z]”)将字符串拆分为单词。
然后循环遍历数组,并像上面那样反转每个部分。最后,再次将字符串连接在一起。要按顺序获得分隔符数组,只需使用str.split(“[a-zA-Z]”)
例如:
String[] words=str.split('[^a-zA-Z]');
String[] separators=str.split('[a-zA-Z]');
//Left as an exercise: reverse each element of the words array (as you did in the original question)
int offset=0;
//Left as an exercise: If the sentence starts with punctuation, increment offset by one and insert the punctuation at the beginning
StringBuilder sb = new StringBuilder();
for(int i=0;i<words.length;i++)
{
sb.append(words[i]);
if(i+offset<separators.length)
{
sb.append(separators[i+offset]);
}
}
String[]words=str.split(“[^a-zA-Z]”);
字符串[]分隔符=str.split('[a-zA-Z]');
//左为练习:反转单词数组的每个元素(如您在原始问题中所做的那样)
整数偏移=0;
//左作为练习:如果句子以标点符号开头,则按1递增偏移量,并在开头插入标点符号
StringBuilder sb=新的StringBuilder();
对于(inti=0;ipublicsstringreversestring(stringstr){
字符串temp=“”,结果=“”;
对于(inti=0;i='A'&&str.charAt(i)='A'&&str.charAt(i)='0'&&str.charAt(i)public String reverseString(String str){
字符串temp=“”,结果=“”;
对于(int i=0;i='A'&&str.charAt(i)='A'&&str.charAt(i)='0'&&str.charAt(i)您可以尝试使用正则表达式查找所有单词,然后使用Matchers方法和appendTail
用反向版本替换已建立的单词。要生成单词的反向版本,您可以使用
StringBuilder().append(word).reverse().toString();
这是你可以做到的
public static void main(String[] args) throws Exception {
Pattern p = Pattern.compile("\\p{IsAlphabetic}+");
StringBuffer sb = new StringBuffer();
Matcher m = p.matcher("Hello, World!");
while (m.find()) {
m.appendReplacement(sb, reverseWord(m.group()));
}
m.appendTail(sb);
System.out.println(sb);
}
private static String reverseWord(String word) {
return new StringBuilder().append(word).reverse().toString();
}
输出:
olleH, dlroW!
您可以尝试使用正则表达式查找所有单词,然后使用Matchers方法和appendTail
将建立的单词替换为反向版本。要生成单词的反向版本,可以使用
StringBuilder().append(word).reverse().toString();
这是你可以做到的
public static void main(String[] args) throws Exception {
Pattern p = Pattern.compile("\\p{IsAlphabetic}+");
StringBuffer sb = new StringBuffer();
Matcher m = p.matcher("Hello, World!");
while (m.find()) {
m.appendReplacement(sb, reverseWord(m.group()));
}
m.appendTail(sb);
System.out.println(sb);
}
private static String reverseWord(String word) {
return new StringBuilder().append(word).reverse().toString();
}
输出:
olleH, dlroW!
setCharAt不是字符串函数,因为字符串是不可变的,但是您可以使用char数组或StringBuilder(仅包装char数组)来实现这一点.isAlphaNumeric不是我能找到的任何地方的标准方法,但是Character.isAlphabetic是我相信您想要的。我正在尽可能地使用它来满足您的限制:
private static CharSequence reverseWords( CharSequence in )
{
StringBuilder sb = new StringBuilder( in );
for( int i = 0, len = sb.length(); i < len; i++ )
{
if( Character.isAlphabetic( sb.charAt( i ) ) )
{
int end = i;
while( ++end < len && Character.isAlphabetic( sb.charAt( end ) ) );
int j = end - 1;
while( j > i )
{
char temp = sb.charAt( i );
sb.setCharAt( i++, sb.charAt( j ) );
sb.setCharAt( j--, temp );
}
i = end;
}
}
return sb;
}
private static CharSequence reverseWords(CharSequence in)
{
StringBuilder sb=新的StringBuilder(in);
for(int i=0,len=sb.length();ii)
{
字符温度=某人字符(i);
sb.setCharAt(i++,sb.charAt(j));
b.塞查拉特(j--,临时);
}
i=结束;
}
}
归还某人;
}
但是,如果要在不使用StringBuilder的情况下直接使用字符数组,请执行以下操作:
private static String reverseWords( String in )
{
char[] chars = in.toCharArray();
for( int i = 0, len = chars.length; i < len; i++ )
{
if( Character.isAlphabetic( chars[i] ) )
{
int end = i;
while( ++end < len && Character.isAlphabetic( chars[end] ) );
int j = end - 1;
while( j > i )
{
char temp = chars[i];
chars[i++] = chars[j];
chars[j--] = temp;
}
i = end;
}
}
return String.valueOf( chars );
}
私有静态字符串反向记录(字符串输入)
{
char[]chars=in.toCharArray();
for(int i=0,len=chars.length;ii)
{
字符温度=字符[i];
chars[i++]=chars[j];
字符[j--]=温度;
}
i=结束;
}
}
返回字符串.valueOf(字符);
}
setCharAt不是字符串函数,因为字符串是不可变的,但是您可以使用char数组或StringBuilder(仅包装char数组)来实现这一点.isAlphaNumeric不是我能找到的任何地方的标准方法,但是Character.isAlphabetic是我相信您想要的。我正在尽可能地使用它来满足您的限制:
private static CharSequence reverseWords( CharSequence in )
{
StringBuilder sb = new StringBuilder( in );
for( int i = 0, len = sb.length(); i < len; i++ )
{
if( Character.isAlphabetic( sb.charAt( i ) ) )
{
int end = i;
while( ++end < len && Character.isAlphabetic( sb.charAt( end ) ) );
int j = end - 1;
while( j > i )
{
char temp = sb.charAt( i );
sb.setCharAt( i++, sb.charAt( j ) );
sb.setCharAt( j--, temp );
}
i = end;
}
}
return sb;
}
private static CharSequence reverseWords(CharSequence in)
{
StringBuilder sb=新的StringBuilder(in);
for(int i=0,len=sb.length();ii)
{
字符温度=某人字符(i);
sb.setCharAt(i++,sb.charAt(j));
b.塞查拉特(j--,临时);
}
i=结束;
}
}
归还某人;
}
但是,如果要在不使用StringBuilder的情况下直接使用字符数组,请执行以下操作:
private static String reverseWords( String in )
{
char[] chars = in.toCharArray();
for( int i = 0, len = chars.length; i < len; i++ )
{
if( Character.isAlphabetic( chars[i] ) )
{
int end = i;
while( ++end < len && Character.isAlphabetic( chars[end] ) );
int j = end - 1;
while( j > i )
{
char temp = chars[i];
chars[i++] = chars[j];
chars[j--] = temp;
}
i = end;
}
}
return String.valueOf( chars );
}
私有静态字符串反向记录(字符串输入)
{
char[]chars=in.toCharArray();
for(int i=0,len=chars.length;i