Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建具有可变但设置长度的元素的对象类_Java_Arrays_Char - Fatal编程技术网

Java 创建具有可变但设置长度的元素的对象类

Java 创建具有可变但设置长度的元素的对象类,java,arrays,char,Java,Arrays,Char,我想创建一个对象(Wine),其中包含一组数据,其中每个数据元素的大小不同(年份、地区、制造商、品种等)。我希望能够使用每个元素的设置长度以表格格式打印出来。我已经搜索并尝试了很多方法,但都找不到答案 我的类定义如下所示: public class Wine { char[] year; char[] area; // Wine area char[] brand; // Wine brand char type; // R or W or F char[] variety; char bin;

我想创建一个对象(Wine),其中包含一组数据,其中每个数据元素的大小不同(年份、地区、制造商、品种等)。我希望能够使用每个元素的设置长度以表格格式打印出来。我已经搜索并尝试了很多方法,但都找不到答案

我的类定义如下所示:

public class Wine {
char[] year;
char[] area; // Wine area
char[] brand; // Wine brand
char type; // R or W or F
char[] variety;
char bin;
int numbottles;
我可以从txt文件中读取数据,但元素被缩短为文本内容加上一个空格,因此表格丢失

我在我的主要部分中尝试了这一点,但没有成功:

wine.year = rightpad(tokens[0].toCharArray(), 5) ;
wine.area = rightpad(tokens[1].toCharArray(), 9);
            ....

static char[] rightpad(char[] text, int leng) {
    for(int i = text.length - 1; i < leng; i++){
        text = (new String(text) + ' ').toCharArray();
    }
    return text;
}
wine.year=rightpad(令牌[0].toCharArray(),5);
wine.area=rightpad(令牌[1].toCharArray(),9);
....
静态字符[]右键盘(字符[]文本,整数长度){
for(int i=text.length-1;i
如有任何建议,将不胜感激

Chris A

您可以使用

设置
字符串的长度
,并使用负值将空格添加到右侧(不带减号,添加到左侧)


有关该格式的完整信息,请访问org.apache.commons.lang.StringUtils


下面是我的解析例程,它读取字符串行并提取每个对象元素,然后将它们添加到末尾的对象中:

 static List<Wine> parseLine(String line, List<Wine> wineInfo) {
    String year = null;
    String area = null;
    String brand = null;
    String type = null;
    String variety = null;
    String bin = null;
    String numbottles = null;
    String drinkyear = null;
    String cost = null;
    Wine wine = new Wine(year, area, brand, type, variety, bin,
            numbottles, drinkyear, cost);
    int length = line.length();
    int j = 0;
    char yr[] = new char[3];

    for (int i = 0; i < 3; i++) {
        yr[j] = line.charAt(i);
        year = new String(yr);
        j = j + 1;
    }
    char temp[] = new char[7];
    j = 0;
    for (int i = 3; i < 10; i++) {
        temp[j] = line.charAt(i);
        area = new String(temp);
        j = j + 1;
    }
    char temp1[] = new char[12];
    j = 0;
    for (int i = 10; i < 22; i++) {
        temp1[j] = line.charAt(i);
        brand = new String(temp1);
        j = j + 1;
    }
    char temp3[] = new char[2];
    j = 0;
    for (int i = 22; i < 24; i++) {
        temp3[j] = line.charAt(i);
        type = new String(temp3);
        j = j + 1;
    }
    char temp2[] = new char[21];
    j = 0;
    for (int i = 24; i < 45; i++) {
        temp2[j] = line.charAt(i);
        variety = new String(temp2);
        j = j + 1;
    }
    char tmp[] = new char[6];
    j = 0;
    for (int i = 45; i < 51; i++) {
        tmp[j] = line.charAt(i);
        bin = new String(tmp);
        j = j + 1;
    }
    char temp4[] = new char[3];
    j = 0;
    for (int i = 51; i < 54; i++) {
        temp4[j] = line.charAt(i);
        numbottles = new String(temp4);
        j = j + 1;
    }
    char temp5[] = new char[4];
    j = 0;
    for (int i = 54; i < 58; i++) {
        temp5[j] = line.charAt(i);
        drinkyear = new String(temp5);
        j = j + 1;
    }
    char temp6[] = new char[7];
    j = 0;
    for (int i = 58; i < length; i++) {
        temp6[j] = line.charAt(i);
        cost = new String(temp6);
        j = j + 1;
    }

    wine.setYear(year);
    wine.setArea(area);
    wine.setBrand(brand);
    wine.setType(type);
    wine.setVariety(variety);
    wine.setBin(bin);
    wine.setNumbottles(numbottles);
    wine.setDrinkYear(drinkyear);
    wine.setCost(cost);

    wineInfo.add(new Wine(year, area, brand, type, variety, bin,
            numbottles, drinkyear, cost));

    return wineInfo;
}
静态列表解析行(字符串行,列表信息){
字符串year=null;
字符串区域=空;
字符串brand=null;
字符串类型=null;
字符串变量=null;
字符串bin=null;
字符串numbottles=null;
字符串drinkyear=null;
字符串成本=空;
葡萄酒=新葡萄酒(年份、地区、品牌、类型、品种、桶、,
麻木瓶、饮料盒、成本);
int length=line.length();
int j=0;
char yr[]=新字符[3];
对于(int i=0;i<3;i++){
yr[j]=第i行字符;
年=新字符串(年);
j=j+1;
}
字符温度[]=新字符[7];
j=0;
对于(int i=3;i<10;i++){
温度[j]=线字符(i);
面积=新字符串(临时);
j=j+1;
}
字符temp1[]=新字符[12];
j=0;
对于(int i=10;i<22;i++){
temp1[j]=行字符(i);
品牌=新字符串(temp1);
j=j+1;
}
字符temp3[]=新字符[2];
j=0;
对于(int i=22;i<24;i++){
temp3[j]=线字符(i);
类型=新字符串(temp3);
j=j+1;
}
char temp2[]=新字符[21];
j=0;
对于(int i=24;i<45;i++){
temp2[j]=线字符(i);
变化=新字符串(temp2);
j=j+1;
}
字符tmp[]=新字符[6];
j=0;
对于(int i=45;i<51;i++){
tmp[j]=线特征(i);
bin=新字符串(tmp);
j=j+1;
}
字符temp4[]=新字符[3];
j=0;
对于(int i=51;i<54;i++){
temp4[j]=线字符(i);
numbottles=新字符串(temp4);
j=j+1;
}
字符temp5[]=新字符[4];
j=0;
对于(int i=54;i<58;i++){
temp5[j]=行字符(i);
drinkyear=新字符串(temp5);
j=j+1;
}
字符temp6[]=新字符[7];
j=0;
对于(int i=58;i
}

然后,我使用collections Comparator方法进行排序:

 List<Wine> wineByYear = new ArrayList<Wine>(wineInfo);
 Collections.sort(wineByYear, Wine.YearComparator);
List wineByYear=new ArrayList(wineInfo);
收集。分类(wineByYear、Wine.YearComparator);

为什么不仅仅是你的
字符串
而不是
字符
数组?你的预期和实际输出是什么?我使用了String.format方法,但没有成功。我将逐行导入列表,将其拆分并将每个元素添加到Wine对象(首先尝试使用所需长度格式化相关项),然后创建一个对象数组list wineinfo(ArrayList wineinfo=null;)。然后使用wineinfo.add将每种葡萄酒添加到数组中。当我打印出数组时,它只显示每个元素之间的一个空格。@ChrisAppleby请显示如何使用它。我的答案告诉你如何使用它来添加一些填充。。。我猜不出你是怎么用它来不得到正确的输出的。请编辑有问题的问题…我试过了,还创建了我自己的rightpad函数。StringUtils这是保存方法的外观描述。它还为您提供了更多的使用可能性。像StringUtils.leftPad(“bat”,8,“yz”)=“yzyBat”看到完整的程序转到@ChrisAppleby不要期望我们检查你的代码。。。如果您愿意,请在问题中包含一个片段……最后,我创建了自己的解析器,逐行检查每一行,为对象的每个元素创建正确长度的字符串。谢谢你的评论。克里斯A@ChrisAppleby您从未编辑过您的问题,因此建议的两个答案都是正确的。你应该看看,我道歉。最后的答案现在包括在内。
 static List<Wine> parseLine(String line, List<Wine> wineInfo) {
    String year = null;
    String area = null;
    String brand = null;
    String type = null;
    String variety = null;
    String bin = null;
    String numbottles = null;
    String drinkyear = null;
    String cost = null;
    Wine wine = new Wine(year, area, brand, type, variety, bin,
            numbottles, drinkyear, cost);
    int length = line.length();
    int j = 0;
    char yr[] = new char[3];

    for (int i = 0; i < 3; i++) {
        yr[j] = line.charAt(i);
        year = new String(yr);
        j = j + 1;
    }
    char temp[] = new char[7];
    j = 0;
    for (int i = 3; i < 10; i++) {
        temp[j] = line.charAt(i);
        area = new String(temp);
        j = j + 1;
    }
    char temp1[] = new char[12];
    j = 0;
    for (int i = 10; i < 22; i++) {
        temp1[j] = line.charAt(i);
        brand = new String(temp1);
        j = j + 1;
    }
    char temp3[] = new char[2];
    j = 0;
    for (int i = 22; i < 24; i++) {
        temp3[j] = line.charAt(i);
        type = new String(temp3);
        j = j + 1;
    }
    char temp2[] = new char[21];
    j = 0;
    for (int i = 24; i < 45; i++) {
        temp2[j] = line.charAt(i);
        variety = new String(temp2);
        j = j + 1;
    }
    char tmp[] = new char[6];
    j = 0;
    for (int i = 45; i < 51; i++) {
        tmp[j] = line.charAt(i);
        bin = new String(tmp);
        j = j + 1;
    }
    char temp4[] = new char[3];
    j = 0;
    for (int i = 51; i < 54; i++) {
        temp4[j] = line.charAt(i);
        numbottles = new String(temp4);
        j = j + 1;
    }
    char temp5[] = new char[4];
    j = 0;
    for (int i = 54; i < 58; i++) {
        temp5[j] = line.charAt(i);
        drinkyear = new String(temp5);
        j = j + 1;
    }
    char temp6[] = new char[7];
    j = 0;
    for (int i = 58; i < length; i++) {
        temp6[j] = line.charAt(i);
        cost = new String(temp6);
        j = j + 1;
    }

    wine.setYear(year);
    wine.setArea(area);
    wine.setBrand(brand);
    wine.setType(type);
    wine.setVariety(variety);
    wine.setBin(bin);
    wine.setNumbottles(numbottles);
    wine.setDrinkYear(drinkyear);
    wine.setCost(cost);

    wineInfo.add(new Wine(year, area, brand, type, variety, bin,
            numbottles, drinkyear, cost));

    return wineInfo;
}
 List<Wine> wineByYear = new ArrayList<Wine>(wineInfo);
 Collections.sort(wineByYear, Wine.YearComparator);