Java 创建一个具有动态范围的单个字符的字符串

Java 创建一个具有动态范围的单个字符的字符串,java,jasper-reports,ireport,Java,Jasper Reports,Ireport,我正在使用JasperReports生成报告,它连接到一个具有整数字段级别的数据库表。 此级别将存储一些数字。。。1,2,3,然后继续。 在报告中,我想创建一个带有这些下划线的字符串,这意味着如果级别为4,则生成的字符串将为_u。 我知道我可以用java这样的语言实现: int i = 3; char[] vect = new char[i]; Arrays.fill(vect, '_'); System.out.println(vect); 但是在JasperReports中,我不能调用命令

我正在使用JasperReports生成报告,它连接到一个具有整数字段级别的数据库表。 此级别将存储一些数字。。。1,2,3,然后继续。 在报告中,我想创建一个带有这些下划线的字符串,这意味着如果级别为4,则生成的字符串将为_u。 我知道我可以用java这样的语言实现:

int i = 3;
char[] vect = new char[i];
Arrays.fill(vect, '_');
System.out.println(vect);
但是在JasperReports中,我不能调用命令,如果array.fill将返回数组本身而不是void,我可以调用命令。
还有其他方法吗?

您可以使用for循环来追加字符串。 我不确定我是否确切知道你的意思,但可能是这样的

int i = 3;
String s;
for(int k = 0; k < i; i++){
    s = s + "_";
}
System.out.print(s);

未测试,但看起来正常

如果级别数不是更高的数字,则可以有条件地使用If-else编写,如下所示:

$F{level}.equals("1")?"_":
              $F{level}.equals("2")?"__":
                       $F{level}.equals("3")?"___":____  <---- last one is 4
继续下去


这不是一个好的解决方案,但您在jasper中不能有其他选项来进行此类操作:

问题是,在JasperReports中,您不能在文本字段表达式中运行一批命令,只能执行一个返回文本字段指定类的对象的命令。数字从0到无穷大,因此不可能执行。哦。。。那贾斯珀就不可能了。