如何限制java中每行打印的字符数?

如何限制java中每行打印的字符数?,java,Java,我正在用java编写一个程序进行练习,除了程序的一部分外,我几乎完成了所有的工作 在我开始提问之前,让我先简要介绍一下这个项目的背景知识。基本上,程序从.txt文件中读入数据,将信息存储在HashMap中,然后以所需格式将输出打印到另一个txt文件中 打印出来的每一行的最大字符长度必须为330。如果它接近这个极限,它基本上需要转到下一行,继续打印它停止的地方 我上传了一个到我的dropbox文件的链接(链接在这里:),其中包含一个示例输入文件(实际将被读入我的程序的文件),一个说明如何正确打印信

我正在用java编写一个程序进行练习,除了程序的一部分外,我几乎完成了所有的工作

在我开始提问之前,让我先简要介绍一下这个项目的背景知识。基本上,程序从.txt文件中读入数据,将信息存储在HashMap中,然后以所需格式将输出打印到另一个txt文件中

打印出来的每一行的最大字符长度必须为330。如果它接近这个极限,它基本上需要转到下一行,继续打印它停止的地方

我上传了一个到我的dropbox文件的链接(链接在这里:),其中包含一个示例输入文件(实际将被读入我的程序的文件),一个说明如何正确打印信息的示例文件,然后是一个显示我未完成程序的当前输出外观的文件

此外,下面是我的所有代码为这个程序。。。时间不长。如果有人能就如何解决这个问题提出一些建议,我将不胜感激。如果我能提供其他任何东西,请告诉我

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.nio.file.Paths;
import java.nio.file.Files;



public class Processor {

private String[] finalArray;
private int numberOfCpt;
private int quantity;
private int i = 1;
private int length;
private int length1;
private int lineLength;
private HashMap<Integer, LinkedList<String>> map = new HashMap<Integer, 
                   LinkedList<String>>();
private String[] columns;



public Processor() {
  finalArray = new String[0];
}


public void readFile(String fileIn) throws IOException {

  String fileName = fileIn;

  Files.lines(Paths.get(fileName)).forEach(
        s -> {
           columns = s.split("\t");
           Integer key = Integer.parseInt(columns[0]);
           if (!map.containsKey(key)) {
              map.put(key, new LinkedList<String>());
           }
           map.get(key).add(columns[1]);
        });

}


public String generateReport() {

  String output = "";
  String line1 = "";
  String output1 = "";

  for (int c = 0; c < 15000; c++) {
     if (map.get(c) == null) {
        System.out.print("");
     }

     else {
        for (int z = 0; z < 1; z++) {
           output1 += "If ";

           output1 += "IsCPT" + "(\"" 
                      + map.get(c).toString().replace(" ", "") 
                      + "\"" + ")";

           output1 += " Then\n   If Quantity > " + c + 
                      " AND Allowance   >" 
                      + " 0.0 Then \n      HoldBill(\"MUE Edits\")"
                      + "\n   End If\n";
           if (c >= 1) {
              output1 += "Else";
           }               

           if (output1.contains("[")) {
              output1 = output1.replace("[", ""); 
           }

           if (output1.contains("]")) {
              output1 = output1.replace("]", "");
           }
           output = output1;
        }
     }
  }
  return output;
}



private static ArrayList<String> charLimiter(String input, int limit) {
  ArrayList<String> list = new ArrayList<>();
  String[] parts = input.split(",");
  StringBuilder sb = new StringBuilder();
  for (String part : parts) {
     if (sb.length() + part.length() > limit) {
        list.add(sb.toString().substring(0, sb.toString().length()));
        sb = new StringBuilder();
     }
     sb.append(part + ",");
  }

  if (sb.length() > 0) {
     list.add(sb.toString());
  }

  return list;
}
}
import java.io.IOException;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.LinkedList;
导入java.nio.file.path;
导入java.nio.file.Files;
公共类处理器{
私有字符串[]finalArray;
私人国际号码;
私人整数数量;
私有int i=1;
私有整数长度;
私人内部长度1;
专用整数线长度;
private HashMap map=new HashMap();
私有字符串[]列;
公共处理器(){
finalArray=新字符串[0];
}
public void readFile(字符串fileIn)引发IOException{
字符串fileName=fileIn;
Files.lines(path.get(fileName)).forEach(
s->{
列=s.split(“\t”);
Integer key=Integer.parseInt(列[0]);
如果(!map.containsKey(键)){
put(key,newlinkedlist());
}
map.get(key.add)(列[1]);
});
}
公共字符串生成器报告(){
字符串输出=”;
字符串line1=“”;
字符串output1=“”;
对于(int c=0;c<15000;c++){
if(map.get(c)=null){
系统输出打印(“”);
}
否则{
对于(intz=0;z<1;z++){
输出1+=“如果”;
输出1+=“IsCPT”+”(\“”
+map.get(c.toString().replace(“,”)
+ "\"" + ")";
output1+=“然后\n如果数量大于”+c+
“和津贴>”
+“0.0然后\n保留账单(\“MUE编辑\”)”
+“\n如果结束\n”;
如果(c>=1){
输出1+=“其他”;
}               
if(output1.contains(“[”)){
output1=output1.replace(“[”,”);
}
if(output1.contains(“])){
output1=output1.replace(“]”,“”);
}
输出=输出1;
}
}
}
返回输出;
}
专用静态ArrayList字符限制器(字符串输入,整数限制){
ArrayList=新建ArrayList();
String[]parts=input.split(“,”);
StringBuilder sb=新的StringBuilder();
用于(字符串部分:部分){
如果(sb.length()+part.length()>限制){
添加(sb.toString().substring(0,sb.toString().length());
sb=新的StringBuilder();
}
sb.附加(部分+“,”);
}
如果(sb.length()>0){
添加(sb.toString());
}
退货清单;
}
}

您需要一次打印一个单词。打印前,检查剩余字符数是否大于1+numCharInWord(1表示前导空格)。如果没有,请插入新行。我不是真的在跟随。。。在我的generateReport()方法中,我基本上是循环从1到15000的每个数字,并打印每个数字中包含的任何值(例如,当我的循环从map.get[1].toString()开始时,它将打印每个值为1的代码(大约7700个代码)。我如何一次打印这1个字?如果要限制行的长度,需要确定当前要打印的块是否比剩余的行长度短(这是一个变量!),如果不短,则添加一个换行符(并重置变量)。伙计,我不想成为那个家伙,但我很难理解逻辑。“确定要打印的当前区块是否比剩余的行长度短”-如何确定“要打印的当前区块”是什么,因为“区块”将是7700个CPT代码,如何声明一个变量以返回“剩余”行长度的长度?好吧,初看您的代码,我看到这个
(int z=0;z<1;z++)
。因此,这看起来很可疑,因为您将只执行此循环一次。您需要一次打印一个字。在打印之前,请检查剩余的字符数是否大于1+numCharInWord(1表示前导空格)。如果没有,请插入一个换行符。我并没有真正遵循……在我的generateReport()方法中,我基本上是在循环从1到15000的每个数字,并打印每个数字中包含的任何值(例如,当我的循环从map.get[1].toString()开始时,它将打印每个值为1的代码(大约7700个代码)。我如何一次打印这1个字?如果要限制行的长度,需要确定要打印的当前块是否比剩余行长度短(这是一个变量!),如果不短,则添加一个换行(并重置变量)。伙计,我不想成为那个家伙,但我很难理解逻辑。”确定当前要打印的区块是否比剩余的行长度短”-如何确定“当前要打印的区块”是什么,因为“区块”将是7700个CPT代码如何声明一个变量以返回“剩余”行长度的长度?好吧,乍一看你的代码,我看到这个
(I