Java 删除最后一个新行字符串

Java 删除最后一个新行字符串,java,string,recursion,newline,Java,String,Recursion,Newline,所以我已经尝试了几乎所有的方法来去除代码中的最后一个换行符。它应该在每次递归调用后打印新行,最后一次除外。有什么想法吗 public static boolean solve(double target, ArrayList<Double> numbers) { String print = ""; String newPrint = ""; double compare = 0; boolean done = false; for (do

所以我已经尝试了几乎所有的方法来去除代码中的最后一个换行符。它应该在每次递归调用后打印新行,最后一次除外。有什么想法吗

public static boolean solve(double target, ArrayList<Double> numbers)
{
    String print = "";
    String newPrint = "";
    double compare = 0;

    boolean done = false;

    for (double num : numbers)
    {
        if (!done)
        {

            ArrayList<Double> remaining = new ArrayList<Double>(numbers);

            remaining.remove(num);

            if (target == num)
            {
                done = true;

            }
            else
            {

                done = solve(target + num, remaining);
                if (done)
                {
                    print += ((int) target + (int) num) + " " + "-" + " " + (int) num + " "
                            + "="
                            + " "
                            + ((int) target + "\n");
                }
                else
                {

                    done = solve(target - num, remaining);
                    if (done)
                    {
                        print += ((int) target - (int) num) + " " + "+" + " " + (int) num + " "
                                + "=" + " "
                                + ((int) target + "\n");
                    }
                    else
                    {

                        done = solve(target * num, remaining);
                        if (done)
                        {
                            print += ((int) target * (int) num) + " " + "/" + " " + (int) num
                                    + " " + "=" + " "
                                    + ((int) target + "\n");
                        }
                        else
                        {

                            done = solve(target / num, remaining);
                            if (done)
                            {
                                print += ((int) target / (int) num) + " " + "*" + " "
                                        + (int) num
                                        + " " + "="
                                        + " " + ((int) target + "\n");
                            }
                        }
                    }
                }

            }
        }

    }

    System.out.print(print);

    return done;
  }
}
公共静态布尔解算(双目标,数组列表编号)
{
字符串打印=”;
字符串newPrint=“”;
双重比较=0;
布尔完成=假;
for(双数字:数字)
{
如果(!完成)
{
ArrayList剩余=新的ArrayList(编号);
剩余。移除(num);
如果(目标==num)
{
完成=正确;
}
其他的
{
完成=解决(目标+数量,剩余);
如果(完成)
{
打印+=((int)目标+(int)num)+++“-++”(int)num++”
+ "="
+ " "
+((int)target+“\n”);
}
其他的
{
完成=解决(目标-数量,剩余);
如果(完成)
{
打印+=((int)目标-(int)num)+++++++++++(int)num++”
+ "=" + " "
+((int)target+“\n”);
}
其他的
{
完成=解决(目标*num,剩余);
如果(完成)
{
打印+=((int)目标*(int)num)+++“/”++(int)num
+ " " + "=" + " "
+((int)target+“\n”);
}
其他的
{
完成=解决(目标/数量,剩余);
如果(完成)
{
打印+=((int)目标/(int)数值)+++*++
+(int)num
+ " " + "="
+“+((int)target+”\n”);
}
}
}
}
}
}
}
系统输出打印(打印);
已完成的返回;
}
}

结果是一个字符串,但您不需要最后一个字符,因此请删除它:

print = print.substring(0, print.length()-1);
使用trim()方法。它将删除字符串开头和结尾的空格、换行符等

系统输出打印(print.trim()

例如:

void recursiveF(...) {
    if ... {
        recursiveF(...);
        println();
    }
    ...
}

Short在打印前打印新行字符

递归函数应该做的第一件事是打印新行字符。 通过这种方式,您可以将奇数大小写从最后一个函数调用转移到第一个调用,而第一个调用不应在新行字符前加前缀

您可以将参数
String prepend=“
添加到递归方法的签名中,第一次调用时该参数为空,所有后续调用都将其设置为
String prepend=“\n”

然后,您可以只打印
prepend
,而不必费心处理其内容。

为什么不使用换行符迭代
numbers.size()-1
,然后不为最后一行添加换行符?很难遵循您的逻辑。您的问题是一个常见问题,一个简单的解决方案是仅在存在另一个递归的情况下打印换行符。与其在除最后一行之外的每一行之后打印换行符,不如在除第一行之外的每一行之前打印换行符。知道你什么时候是第一个要比知道你什么时候是最后一个容易得多。我也建议先把它打印出来@Hasseb Waseem看看我的答案。这种方法是有效的,但我宁愿使用尾部递归或循环。