如何反转数组中的字符串?

时间:2016-04-13 05:43:29

标签: java recursion

import java.io.*;
import java.util.Scanner;

class FileReverse{
   public static void main(String[] args) throws IOException{

      //charAt(int index): Returns the char value at the specified index.
      //substring(int beginindex, int endindex): Returns a new string that is a substring of the string. 
      //valueOf(char c): Returns the string representation of the char argument

      Scanner in = null;
      PrintWriter out = null;
      String line = null;
      String[] token = null;
      int i ,n ;

      // check number of command line arguments is at least 2
      if(args.length < 2){
         System.out.println("Usage: FileCopy <input file> <output file>");
         System.exit(1);
      }

      // open files
      in = new Scanner(new File(args[0]));
      out = new PrintWriter(new FileWriter(args[1]));

      // read lines from in, extract and print tokens from each line
      while( in.hasNextLine() ){
         // trim leading and trailing spaces, then add one trailing space so 
         // split works on blank lines
         line = in.nextLine().trim() + " "; 

         // split line around white space 
         token = line.split("\\s+"); 

         // reverses the input and prints it to the console.
         n = token.length;
         for(i=0; i<n; i++){
            stringReverse(token[i],(n-1));
            System.out.println(token);
         } 
      }

      // close files
      in.close();
      out.close();
   }

   public static String stringReverse(String s, int n){
      if(n == 0){
         return s.charAt(0) + "";
      }

      char let = s.charAt(n);
      return let + stringReverse(s,(n-1));
   }
}

我们获得了一个带有此输入的文件

abc defg 嗨

jkl mnop q
rstu v wxyz

并且必须以

的形式返回

CBA
GFED
IH
LKJ
ponm
q
utsr
v
zyxw

我的代码编译但我不断得到indexoutofboundsexception,我无法解决这个问题。非常感谢帮助!

2 个答案:

答案 0 :(得分:1)

您在每个空格处拆分String。在以下代码中

n = token.length;
for(i=0; i<n; i++){
    stringReverse(token[i],(n-1));
    System.out.println(token);
}

检查空格分隔的元素数量。但是您所犯的错误是,您正在将n-1解析为函数Stringreverse(除了您不存储返回值的事实)。您正在使用第二个参数作为length的{​​{1}},但您目前正在做的是, 你传递了在用空格分割初始String后返回的数组元素的数量。你应该把它称为:

String

答案 1 :(得分:0)

替换

for(i=0; i<n; i++){
    stringReverse(token[i],(n-1));
    System.out.println(token);
 }

for(i=0; i<n; i++){
   token[i]= stringReverse(token[i],token[i].length()-1);
   System.out.println(token[i]);
}

您必须将每个字符串大小(不是采用的数组大小)传递给stringReverse方法。

我不确定你为什么在for循环中使用以下代码

System.out.println(token);