当前位置: 首页 > 知识库问答 >
问题:

在不影响特殊字符的情况下反转字符串

乐正德华
2023-03-14

为什么它抛出一个错误?任何帮助都将不胜感激

public class RAWS 
{
public String rawsc(String ori)
{
    String temp="";
    for(int i=0;i<ori.length();i++)
    {
        char c=ori.charAt(i);
        if(((c>=65)&&(c<=90))||((c>=97)&&(c<122)))
            temp=c+temp;
    }
    for(int i=0;i<ori.length();i++)
    {
        char c=ori.charAt(i);
        if(((c>=65)&&(c<=90))||((c>=97)&&(c<122)))
            ori.replace(c, temp.charAt(i));
    }
    for(int i=0;i<ori.length();i++)
    {
        System.out.println(ori.charAt(i));
    }
    return(ori);
}
public static void main(String[] args) 
{
    String str="a,b$c";
    RAWS ob=new RAWS();
    String new1=ob.rawsc(str);
    for(int i=0;i<new1.length();i++)
    {
        System.out.print(new1.charAt(i)+" ");
    }
}
}

编辑:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4 
at java.lang.String.charAt(String.java:658) 
at arraygs.RAWS.rawsc(RAWS.java:22) 
at arraygs.RAWS.main(RAWS.java:30)

共有3个答案

於炯
2023-03-14
public class Solution {  
public static void main(String[] args) {  
 System.out.println(reverseString("a,b$c"));  
}  
/**  
* Reverse string with maintaining special character in place  
*  
* Algorithm:  
* 1. create temporary array  
* 2. copy all character from original array excluding special character  
* 3. reverse the temporary array  
* 4. start copying temporary array into original if element is an alphabetic character  
* @param input  
* @return  
*/ 
public static String reverseString(String input) {  
 char[] inputArr = input.toCharArray();  
 char[] tempArr = new char[input.length()];  
 int i=0;  
 int j=0;  
 for (char ch:inputArr){  
   if(Character.isAlphabetic(ch)){  
     tempArr[i] = ch;  
     i++;  
   }  
 }  
 i--;  
 while(j<i){  
   char temp = tempArr[i];  
   tempArr[i]= tempArr[j];  
   tempArr[j]=temp;  
   j++;  
   i--;  
 }  
 for(i=0,j=0;i<input.length();i++){  
   if(Character.isAlphabetic(inputArr[i])){  
     inputArr[i]= tempArr[j++];  
   }  
 }  
 return new String(inputArr);  
}  
}  
韩景胜
2023-03-14

公共课堂练习Java{

public static void main(String []args){

   String str = "\"Str!ng\"";
   System.out.println("Actual str:  "+str);
   System.out.println("Reverse str: "+reverseStrSpecial(str));

}

public static String reverseStrSpecial(String str) {
    int len = str.length();
    char[] revStrArr = new char[len];
    int j = len-1;
    for (int i=0; i <= j; ) {
        if(!Character.isAlphabetic(str.charAt(i))) {
            revStrArr[i] = str.charAt(i);
            i++;
        } else if (!Character.isAlphabetic(str.charAt(j))) {
            revStrArr[j] = str.charAt(j);
            j--;
        } else {
            revStrArr[j] = str.charAt(i);
            revStrArr[i] = str.charAt(j);
            j--;
            i++;
        }
    }

    return new String(revStrArr);
}

}

公孙茂学
2023-03-14

问题在于调用temp。charAt(i)in

for(int i=0;i<ori.length();i++){
    char c=ori.charAt(i);
    if(((c>=65)&&(c<=90))||((c>=97)&&(c<122)))
        ori.replace(c, temp.charAt(i));
}

字符串temp的长度可能不是ori。原因是第一个循环中的if条件

for(int i=0;i<ori.length();i++) {
    char c=ori.charAt(i);
    if(((c>=65)&&(c<=90))||((c>=97)&&(c<122)))
        temp=c+temp;
}

因此,访问temp中的位置i(作为第二个循环的一部分)可能会导致java。lang.StringIndexOutOfBoundsException

 类似资料:
  • 我正在使用Apache POI读取<代码>。docx文件,并在一些操作后写入。<代码>。我使用的docx文件是法语的,但当我在它将一些法语字符转换为特殊字符。示例转换为 下面的代码用于编写文件 默认使用UTF-8。 在调试时,我在写入<代码>之前进行了检查。csv数据保持原样。但它在写作时被转换了吗?我已将默认语言环境设置为语言环境。法语 我错过了什么吗?

  • 正如我们所看到的,一个反斜杠 "\" 是用来表示匹配字符类的。所以它是一个特殊字符。 还存在其它的特殊字符,这些字符在正则表达式中有特殊的含义。它们可以被用来做更加强大的搜索。 这里是包含所有特殊字符的列表:[ \ ^ $ . | ? * + ( )。 现在并不需要尝试去记住它们 —— 当我们分别处理其中的每一个时,你自然而然就会记住它们。 转义 如果要把特殊字符作为常规字符来使用,只需要在它前面

  • 我有一个XML文件,其中包含一个带有特殊字符或转义字符的元素。当我将该文件解组为Java对象时,JAXB会自动转义这些字符。但是,我不希望转义它们,应该用XML文件中存在的任何值填充对象。我的XML文件片段如下所示: 我的JAXB订单类如下所示: 在解组时,Order类对象的名称字段的值为“Order one” 我知道将这个值放在CDATA中的解决方案,这样它就不会被转义,但是我正在解组的XML文

  • 问题内容: 仅当字符串中的字符没有转义时(即以另一个字符的奇数开头),如何才能找到它并对其进行操作? 例: 所需字符: 转义字符: 应该找到(并对其进行操作(例如拆分)) 应该 不会 应该 应该 不会 问题答案: 在后面使用负数a定义边界: 在这里观看现场演示 照顾Java中的反斜杠,正则表达式上方将是:

  • 问题内容: 我想电视机1 ® 2的outputText: 什么不对?我大写。 问题答案: 您可以选择以下之一 在您最初的建议中,您放错了位置,应该在 您也可以完全删除(但您的(R)不会很小) 最后,您可以直接使用它而无需转义

  • 关于字符集和替代字形 除键盘上可看到的字符之外,字体中还包括许多字符。根据字体的不同,这些字符可能包括连字、分数字、花饰字、装饰字、序数字、标题和文体替代字、上标和下标字符、变高数字和全高数字。字形是特殊形式的字符。例如,在某些字体中,大写字母 A 有几种形式可用,如花饰字或小型大写字母。 插入替代字形的方式有两种: 可以使用 “字形 ”面板来查看和插入任何字体中的字形。 可以使用 “OpenTy