在java中,在文本文件中的特定位置写入单词

在java中,在文本文件中的特定位置写入单词,java,mysql,text-files,filewriter,Java,Mysql,Text Files,Filewriter,我正在写一个项目,其中我必须将MySQL数据库中的问题和标记写在一个文本文件中(问题和标记在数据库的不同列中,但在同一个表中)。在这里,我想在相同的位置写下标记,即在每个问题后垂直对齐 我尝试使用\t,但无法获得所需的输出 while(myRs.next()) { String question = myRs.getString("question"); String marks = myRs.getString("questionMarks");

我正在写一个项目,其中我必须将MySQL数据库中的问题和标记写在一个文本文件中(问题和标记在数据库的不同列中,但在同一个表中)。在这里,我想在相同的位置写下标记,即在每个问题后垂直对齐

我尝试使用\t,但无法获得所需的输出

while(myRs.next()) {
        String question = myRs.getString("question");
        String marks = myRs.getString("questionMarks");
        try {
        file.write(question+"\t\t\t\t\t\t\t" + marks + "\n");//write to text file
        }
        catch(Exception exe) {
            System.out.println(exe);
        }
        System.out.println("Q" + count +". " + question);
    }
期望输出为:

Q1. Question1........................ 4

Q2. Question2................................4

Q3. Question3...........................5
(单个“.”表示实际输出中的空白,“问题1”、“问题2”、“问题3”不是实际问题,而是语句)

实际产出为:

Q1. Question1........................ 4

Q2. Question2................................4

Q3. Question3...........................5

您只需计算问题的大小,并将剩余的空格添加到首选的行大小

有关重复字符的其他方法,请参见

int maxlinesize = 40;
int count=0;

while(myRs.next()) {
    String question = myRs.getString("question");
    String marks = myRs.getString("questionMarks");
    count++;
    String q="Q"+count+" "+question;
    StringBuffer buffer = new StringBuffer();
    buffer.append(String.join(q, java.util.Collections.nCopies(maxlinesize - q.length(), " ")))
    .append(marks);
    try {
        file.write(buffer.toString()+ "\n");//write to text file
    }
    catch(Exception exe) {
        System.out.println(exe);
    }
}

您只需计算问题的大小,并将剩余的空格添加到首选的行大小

有关重复字符的其他方法,请参见

int maxlinesize = 40;
int count=0;

while(myRs.next()) {
    String question = myRs.getString("question");
    String marks = myRs.getString("questionMarks");
    count++;
    String q="Q"+count+" "+question;
    StringBuffer buffer = new StringBuffer();
    buffer.append(String.join(q, java.util.Collections.nCopies(maxlinesize - q.length(), " ")))
    .append(marks);
    try {
        file.write(buffer.toString()+ "\n");//write to text file
    }
    catch(Exception exe) {
        System.out.println(exe);
    }
}
按照的建议,只需将所有要编写的问题存储在
ArrayList
中即可。另外,将标记存储在另一个
数组列表中。然后,找到最长问题的字符串长度,并使用
string.format
写入文本文件。详情如下:

        ArrayList<String> question1 = new ArrayList<String>();
        ArrayList<Integer> marks1 = new ArrayList<Integer>();
        int maxLen = 0;
        while(myRs.next()) {
            String question = myRs.getString("question");
            Integer marks = myRs.getInt("questionMarks");
            question1.add(question);
            marks1.add(marks);
            for(int i = 0; i < question1.size(); i++) {
                if(question1.get(i).length() > maxLen) {
                    maxLen = question1.get(i).length();

                }
            }
            int index = 0;

            try {

                file.write("Q" + count + ". " + String.format("%-"+(1+maxLen)+"s%d\n", question1.get(index), marks1.get(index)));
            }
            catch(Exception exe) {
                System.out.println(exe);
            }
ArrayList question1=新建ArrayList();
ArrayList marks1=新的ArrayList();
int maxLen=0;
while(myRs.next()){
字符串问题=myRs.getString(“问题”);
整数标记=myRs.getInt(“问号”);
问题1.添加(问题);
标记1.添加(标记);
对于(int i=0;imaxLen){
maxLen=question1.get(i).length();
}
}
int指数=0;
试一试{
file.write(“Q”+count+“+String.format”(“%-”+(1+maxLen)+“s%d\n”、question1.get(index)、marks1.get(index));
}
捕获(异常exe){
System.out.println(exe);
}
`

按照的建议,只需将所有要编写的问题存储在
ArrayList
中。另外,将标记存储在另一个
ArrayList
中。然后,找到最长问题的字符串长度,并使用
string.format
写入文本文件。如下所示:

        ArrayList<String> question1 = new ArrayList<String>();
        ArrayList<Integer> marks1 = new ArrayList<Integer>();
        int maxLen = 0;
        while(myRs.next()) {
            String question = myRs.getString("question");
            Integer marks = myRs.getInt("questionMarks");
            question1.add(question);
            marks1.add(marks);
            for(int i = 0; i < question1.size(); i++) {
                if(question1.get(i).length() > maxLen) {
                    maxLen = question1.get(i).length();

                }
            }
            int index = 0;

            try {

                file.write("Q" + count + ". " + String.format("%-"+(1+maxLen)+"s%d\n", question1.get(index), marks1.get(index)));
            }
            catch(Exception exe) {
                System.out.println(exe);
            }
ArrayList question1=新建ArrayList();
ArrayList marks1=新的ArrayList();
int maxLen=0;
while(myRs.next()){
字符串问题=myRs.getString(“问题”);
整数标记=myRs.getInt(“问号”);
问题1.添加(问题);
标记1.添加(标记);
对于(int i=0;imaxLen){
maxLen=question1.get(i).length();
}
}
int指数=0;
试一试{
file.write(“Q”+count+“+String.format”(“%-”+(1+maxLen)+“s%d\n”、question1.get(index)、marks1.get(index));
}
捕获(异常exe){
System.out.println(exe);
}

`

您是否尝试过使用?作为上述方法的替代方法,您还可以在数据库端进行填充,这样当问题被引入Java时,它们的长度已经相同。您有多少问题?在列表中收集问题并计算最大长度,然后迭代并以计算出的点数打印“问题1”、“问题2”"等是实际文本还是您有问题陈述?这很有帮助。谢谢@avi您尝试过使用吗?作为上述的替代方法,您还可以在数据库端进行填充,这样当问题引入Java时,它们的长度已经相同。您有多少问题?在列表和计算中收集问题计算最大长度,在此迭代之后,打印计算出的点数“问题1”、“问题2”等是实际文本还是你有问题陈述?这很有帮助。谢谢@avi这段代码一遍又一遍地打印同一个问题,然后继续下一个问题,然后做同样的事情。变量计数在我的代码中是一个原子整数,因为我正在使用流在代码中递增它,但代码中没有上载。我不明白你的意思while循环调用
myRs.next()
和问号和问号每次都会获得当前记录的问号和问号。我认为核心问题是空格数,我认为我的代码显示了该问题的解决方案。祝你好运。此代码反复打印同一个问题,然后继续下一个问题,然后执行相同的操作。变量count在我的代码中是一个原子整数,因为我正在使用stream在未上载的代码中递增它,因为我不理解您的注释。while循环调用
myRs.next()
和问号和问号每次都会获得当前记录的问号和问号。我认为核心问题是空格的数量,我认为我的代码显示了该问题的解决方案。祝你好运。