Java 如果有数据,仅从下至上打印行

Java 如果有数据,仅从下至上打印行,java,Java,您将如何着手解决以下逻辑: 我有带单元格的pdf文件: addressLine1 addressLine2 addressLine3 addressLine4 addressLine5 cityStateZip 他们都有能手。 有时,所有字段都有数据,有时没有 为了美观起见,我希望将它们组合在一起,即: 1261 Graeber St (address4) Bldg 2313 Rm 24 (address5) Pensacola FL 32508 (cityStateZip) 如果addre

您将如何着手解决以下逻辑:

我有带单元格的pdf文件:

addressLine1
addressLine2
addressLine3
addressLine4
addressLine5
cityStateZip
他们都有能手。 有时,所有字段都有数据,有时没有

为了美观起见,我希望将它们组合在一起,即:

1261 Graeber St (address4)
Bldg 2313 Rm 24 (address5)
Pensacola FL 32508 (cityStateZip)
如果
addressLine1
是唯一存在的地址,则需要说明其中一些地址为空。即:

1261 Graeber St (address5)
Pensacola FL 32508 (cityStateZip)
这里,由于
address2
address3
address4
都是空的,我们移动了pdf单元格
address5
上的
address1

我的代码现在打印:

1261 Graeber St       (address1)
                      (address2)
                      (address3)
                      (address4)
                      (address5)
Pensacola FL 32508    (cityStateZip)
代码如下:

FdfInput.SetValue("addressLine1", getAddressLine1() );
FdfInput.SetValue("addressLine2", getAddressLine2() );
FdfInput.SetValue("addressLine3", getAddressLine3() );
FdfInput.SetValue("addressLine4", getAddressLine4() );
FdfInput.SetValue("addressLine5", getAddressLine5() );
FdfInput.SetValue("addressLine6", getCityStateZip() );
左边的图片是它现在的样子,我希望它像右边的图片一样

这是
LinkedList.insertLast()
的一个很好的候选者吗?

这是:

if(!getAddressLine1().isEmpty())
    FdfInput.SetValue("addressLine1", getAddressLine1());

if(!getAddressLine2().isEmpty())
    FdfInput.SetValue("addressLine2", getAddressLine2());

if(!getAddressLine3().isEmpty())
    FdfInput.SetValue("addressLine3", getAddressLine3());

if(!getAddressLine4().isEmpty())
    FdfInput.SetValue("addressLine4", getAddressLine4());

if(!getAddressLine5().isEmpty())
    FdfInput.SetValue("addressLine5", getAddressLine5());

if(!getCityStateZip().isEmpty())
    FdfInput.SetValue("cityStateZip", getCityStateZip());
换句话说,如果有数据要添加到行中,那么就这样做,否则就完全跳过它。例如,假设除了address3、address5和cityStateZip之外,所有字段都是空的

// The output will not look like this:    


addressLine3

addressLine5
cityStateZip
相反,它看起来像:

addressLine3
addressLine5
cityStateZip
这:

换句话说,如果有数据要添加到行中,那么就这样做,否则就完全跳过它。例如,假设除了address3、address5和cityStateZip之外,所有字段都是空的

// The output will not look like this:    


addressLine3

addressLine5
cityStateZip
相反,它将看起来像:

addressLine3
addressLine5
cityStateZip

我通过在数组列表中存储字符串并减少名称上的计数器来解决这个问题:

List<String> addrLines = new ArrayList<String>();

if(!getCityStateZip().isEmpty())
    addrLines.add(getTomaCityStateZip());

if(!getAddressLine5().isEmpty())
    addrLines.add(getAddressLine5());

if(!getAddressLine4().isEmpty())
    addrLines.add(getAddressLine4());

if(!getAddressLine3().isEmpty())
    addrLines.add(getAddressLine3());

if(!getAddressLine2().isEmpty())
    addrLines.add(getAddressLine2());

if(!getAddressLine1().isEmpty())
    addrLines.add(getAddressLine1());

for (int i = addrLines.size(); i > 0; --i)
{
    int line = addrLines.size() - i;
    String field = String.format("addressLine%d", 6 - line);
    FdfInput.SetValue(field, addrLines.get(line));
}
List addrLines=new ArrayList();
如果(!getCityStateZip().isEmpty())
add(getTomaCityStateZip());
如果(!getAddressLine5().isEmpty())
add(getAddressLine5());
如果(!getAddressLine4().isEmpty())
add(getAddressLine4());
如果(!getAddressLine3().isEmpty())
add(getAddressLine3());
如果(!getAddressLine2().isEmpty())
add(getAddressLine2());
如果(!getAddressLine1().isEmpty())
add(getAddressLine1());
对于(int i=addrLines.size();i>0;--i)
{
int line=addrLines.size()-i;
字符串字段=String.format(“地址行%d”,6行);
设置值(字段,addrLines.get(行));
}

我通过在数组列表中存储字符串并减少名称上的计数器来解决这个问题:

List<String> addrLines = new ArrayList<String>();

if(!getCityStateZip().isEmpty())
    addrLines.add(getTomaCityStateZip());

if(!getAddressLine5().isEmpty())
    addrLines.add(getAddressLine5());

if(!getAddressLine4().isEmpty())
    addrLines.add(getAddressLine4());

if(!getAddressLine3().isEmpty())
    addrLines.add(getAddressLine3());

if(!getAddressLine2().isEmpty())
    addrLines.add(getAddressLine2());

if(!getAddressLine1().isEmpty())
    addrLines.add(getAddressLine1());

for (int i = addrLines.size(); i > 0; --i)
{
    int line = addrLines.size() - i;
    String field = String.format("addressLine%d", 6 - line);
    FdfInput.SetValue(field, addrLines.get(line));
}
List addrLines=new ArrayList();
如果(!getCityStateZip().isEmpty())
add(getTomaCityStateZip());
如果(!getAddressLine5().isEmpty())
add(getAddressLine5());
如果(!getAddressLine4().isEmpty())
add(getAddressLine4());
如果(!getAddressLine3().isEmpty())
add(getAddressLine3());
如果(!getAddressLine2().isEmpty())
add(getAddressLine2());
如果(!getAddressLine1().isEmpty())
add(getAddressLine1());
对于(int i=addrLines.size();i>0;--i)
{
int line=addrLines.size()-i;
字符串字段=String.format(“地址行%d”,6行);
设置值(字段,addrLines.get(行));
}

如果(str.isEmpty()){//don't print}
?您能展示到目前为止实现的实际Java吗?如果(str.isEmpty()){//don't print},你能展示到目前为止你实现的实际Java吗?基于现有内容进行构建会更容易。这并不能解决我向下移动确实存在的字段的问题。请查看我编辑的答案,现在给出一个示例,并告诉我为什么它不起作用。如果不对应该为空的字段调用FdfInput.SetValue(),Api会发生什么情况?如果它只是打印一个空单元格,这个解决方案应该会起作用。pdf中的这些单元格是固定的,所以我必须找到一种干净的方法将addressLine1值放入pdf单元格“addressLine5”如果所有其他getter都是emptySo@Angelina,看起来你真的希望空格留在那里,您只想将包含数据的字段推到底?这无法解决我向下移动确实存在的字段的问题。请查看我编辑的答案,现在给出一个示例,并告诉我为什么它不起作用。如果不对应该为空的字段调用FdfInput.SetValue(),Api会发生什么情况?如果它只是打印一个空单元格,这个解决方案应该会起作用。pdf中的这些单元格是固定的,所以我必须找到一种干净的方法将addressLine1值放入pdf单元格“addressLine5”如果所有其他getter都是emptySo@Angelina,看起来你真的希望空格留在那里,你只是想把包含数据的字段推到底?今天早上我又看了一遍,发现了一些类似的东西,并试图找到一种更优雅/动态的方法来实现这一点,但它看起来不错!如果我以后能想出更有效的办法,我会发回的---编辑:但当字段名为cityStateZip时会发生什么?好问题,但我很幸运能够控制pdf单元格的命名,并决定将其命名为addressLine1-6I。今天早上我再次查看了这一点,发现了一些类似的内容,并试图找到一种更优雅/动态的方法来实现这一点,但它看起来不错!如果我以后能想出更有效的办法,我会发回的---编辑:但当该字段被称为cityStateZip时会发生什么?好问题,但我很幸运能够控制pdf单元格的命名,并决定将其命名为addressLine1-6