翻译句子中的单词

时间:2014-02-22 08:54:02

标签: java arrays java-io

我在文本文件中有以下数据

5
this is a test
foobar
all your base
class
pony along

这里第一个数字表示输入中的行数。遵循数据线。在这里,我想颠倒一句话。

Eg:
this is a test

反转为

test a is this

当我运行以下代码时

String input = "This is interview question.";
String output = "";
String[] array = input.split(" ");
for(int i = array.length-1; i >= 0; i--)
{
    output =output+ array[i];
    if (i != 0) 
    { 
        output =output+ " ";
    }
}
System.out.println(output);

我得到了正确的输出,但是当从文件中读取时,它是另一回事。

我正在使用以下代码查看文本文件中的数据。

import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;

public class Dummy {
    public static void main(String args[]) throws Exception {
//        Scanner s = new Scanner(new File("D:/GC/Store Credit/A-small.in"));
        Scanner s = new Scanner(new File("D:/GC/Reverse/B-small.in"));

        while (s.hasNextLine()){
            System.out.println(s.nextLine());
        }

        s.close();
    }
}

并按照我的文本文件提供输出。

同样当我尝试使用条件来运行上面的代码来反转字符串时,它会给我一个错误的输出

我使用的代码是

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;


public class RevSent {
    public static void main(String[] args) throws Exception {
        File file=new File("D:/GC/Reverse/B-Small.txt");
        FileWriter fw=new FileWriter(file);
        BufferedWriter bw=new BufferedWriter(fw);
        Scanner sc=new Scanner(new File("D:/GC/Reverse/B-small.in"));
        int testCaseCount = Integer.parseInt(sc.next());
        System.out.println("Test cases are:"+testCaseCount);

        for(int i=0;i<testCaseCount;i++)
        {
             while (sc.hasNextLine()){
                    String input=sc.nextLine();
                    System.out.println(input);
                    String output="";
                    String[] array=input.split(" ");
                    for(int j=array.length-1;j>0;j--){
                        output+=array[j];
                    }
                    System.out.println(output);
                }
            }
        sc.close();
    }
}

,我得到的输出是

Test cases are:5


this is a test
testais
foobar

all your base
baseyour
class

pony along
along

请告诉我哪里出错了。谢谢你我所做的改变和代码工作正常,但我遇到了另一种情况,我要在结果之前添加案例编号(测试案例编号),但在我的代码中,案例编号仍然是只有1.代码如下。

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;


public class RevSent {

    public static void main(String[] args) throws Exception {
        File file=new File("D:/GC/Reverse/B-Small.txt");
        FileWriter fw=new FileWriter(file);
        BufferedWriter bw=new BufferedWriter(fw);
        Scanner sc=new Scanner(new File("D:/GC/Reverse/B-small.in"));
        int testCaseCount = Integer.parseInt(sc.next());
//      System.out.println("Test cases are:"+testCaseCount);

        for(int i=0;i<testCaseCount;i++)
        {
            String output="";
                    String input=sc.nextLine();
                    String[] array=input.split(" ");
                    for(int j=array.length-1;j>=0;j--){
                        output+=array[j]+" ";

                    }

                    bw.write("Case #" + (i+1) + ": " + output + "\r\n");
             System.out.println("Case #" + (i+1) + output+"\r\n");
            }
        bw.close();
        sc.close();
    }
}

,输出如下,并且还有一个没有结果的额外情况。

Case #1 

Case #2test a is this 

Case #3foobar 

Case #4base your all 

Case #5class 

由于

3 个答案:

答案 0 :(得分:3)

编辑更新了最新代码。请尝试以下方法:

public static void main(String[] args) throws Exception {
    File file = new File("D:/GC/Reverse/B-Small.txt");
    FileWriter fw = new FileWriter(file);
    BufferedWriter bw = new BufferedWriter(fw);
    Scanner sc = new Scanner(new File("D:/GC/Reverse/B-small.in"));
    int testCaseCount = Integer.parseInt(sc.next());
    //System.out.println("Test cases are:"+testCaseCount);
    int i = 0;

    while (sc.hasNextLine()) {
        String input = sc.nextLine();
        //System.out.println(input);
        String output = "";
        String[] array = input.split(" ");
        for (int j = array.length - 1; j >= 0; j--) {
            output += array[j] + " ";
        }
        if (!"".equals(output)){
            bw.write("Case #" + (i + 1) + ": " + output.trim() + "\r\n");
        }

    }

    bw.close();
    sc.close();
}

答案 1 :(得分:2)

第二个代码段中for循环的条件是错误的。它应该是:

for(int j=array.length-1; j >= 0; j--) {

您还必须在输出中附加一个空白:

output += array[j] + " ";

我还建议使用StringBuilder来汇编输出字符串。

答案 2 :(得分:2)

这是你的固定程序。

您的主要问题是:
1)for循环内嵌套的while循环
2)你没有在单词之间追加空格

作为旁注,有一个很好的算法 将O(N)中的句子的单词反转到位 Reverse the ordering of words in a string

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.Scanner;

public class RevSent {
    public static void main(String[] args) throws Exception {
        File file = new File("D:/GC/Reverse/B-Small.txt");
        FileWriter fw = new FileWriter(file);
        BufferedWriter bw = new BufferedWriter(fw);
        Scanner sc = new Scanner(new File("D:/GC/Reverse/B-small.in"));
        int testCaseCount = Integer.parseInt(sc.nextLine());
        System.out.println("Test cases are:" + testCaseCount);

        for (int i = 0; i < testCaseCount; i++) {
            String input = sc.nextLine();
            System.out.println(input);
            String output = "";
            String[] array = input.split(" ");
            for (int j = array.length - 1; j >= 1; j--) {
                output += array[j] + " ";
            }
            output += array[0];
            System.out.println(output);
            bw.write(output);
        }
        sc.close();
        bw.close();
    }
}