我如何删除 System.out.print 并拥有唯一的 return

How I can delete the System.out.print and to have a unique return

我有一个奇怪的问题。我需要收集不同的 System.out.print 并在程序结束时创建一个唯一的字符串 return。

我该怎么做?

下面的程序是'凯撒的密码':

    public static String cipher(String input2, Integer number) {
    String expression = input2;
    int k = number;
    int lowerBoundlc = 97;
    int upperBoundlc = 122;
    int lowerBounduc = 65;
    int upperBounduc = 90;
    for (int i = 0; i < expression.length(); i++) {
        char c = expression.charAt(i);
        int j = (int) c;
        if ((lowerBoundlc <= j && j <= upperBoundlc) || (j == 45)) {
            if (j == 45) {
                System.out.print(Character.toString((char) j));
            } else {
                int addk = j + k;
                if (addk > upperBoundlc) {
                    int lowercase = addk % upperBoundlc;
                    int resultlc = lowerBoundlc + lowercase -1;
                    System.out.print(Character.toString((char) resultlc));
                } else {
                    System.out.print(Character.toString((char) addk));
                }
            }

        } else {
            if ((lowerBounduc <= j && j <= upperBounduc) || (j == 45)) {
                int addnewk = j + k;
                if (addnewk > upperBounduc) {
                    int uppercase = addnewk % upperBounduc;
                    int resultuc = lowerBounduc + uppercase -1;
                    System.out.print(Character.toString((char) resultuc));
                } else {
                    System.out.print(Character.toString((char) addnewk));
                }

            }

        }

    }
    return null;    
}

谢谢。

您可以使用 += 或 StringBuilder class 将这些字符串附加在一起,而不是严格打印 Character.toString((char) 变量 )。

这方面的一个例子是

String s = Character.toString((char) j);
System.out.print(s);

String p = Character.toString((char) resultC);
s += p;
System.out.print(p);

将所有字符串连接在一起后,您可以 return 字符串 s 在最后。

public static String cipher(String input2, Integer number) {

    String expression = input2;
    int k = number;
    int lowerBoundlc = 97;
    int upperBoundlc = 122;
    int lowerBounduc = 65;
    int upperBounduc = 90;

    StringBuilder result = new StringBuilder();

    for (int i = 0; i < expression.length(); i++) {
        char c = expression.charAt(i);
        int j = (int) c;

        if ((lowerBoundlc <= j && j <= upperBoundlc) || (j == 45)) {
            if (j == 45) {
                StringBuilder line = new StringBuilder(Character.toString((char) j));
                result.append(line);
            } else {
                int addk = j + k;
                if (addk > upperBoundlc) {
                    int lowercase = addk % upperBoundlc;
                    int resultlc = lowerBoundlc + lowercase - 1;
                    StringBuilder appendresultlc = new StringBuilder(Character.toString((char) resultlc));
                    result.append(appendresultlc);
                } else {
                    StringBuilder appendaddk = new StringBuilder(Character.toString((char) addk));
                    result.append(appendaddk);
                }
            }

        } else {
            if ((lowerBounduc <= j && j <= upperBounduc) || (j == 45)) {
                int addnewk = j + k;
                if (addnewk > upperBounduc) {
                    int uppercase = addnewk % upperBounduc;
                    int resultuc = lowerBounduc + uppercase - 1;
                    StringBuilder appendresultuc = new StringBuilder(Character.toString((char) resultuc));
                    result.append(appendresultuc);
                } else {
                    StringBuilder appendaddnewk = new StringBuilder(Character.toString((char) addnewk));
                    result.append(appendaddnewk);

                }

            }

        }

    }
    return result.toString();
}

我们可以使用 System.out.println() 将消息打印到其他来源。为此,我们必须使用 System.setOut(PrintStream p) 重新分配标准输出;系统方法class

根据您的需要设置 System.setOut();

ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);

PrintStream old = System.out;

// use your special stream
System.setOut(ps);

// All System.out.Println will goes to special stream
System.out.println("This will be written to the string!");

System.out.flush();
System.setOut(old);

String content = new String(baos.toByteArray(), StandardCharsets.UTF_8);
System.out.println("Here: " + content); 

这个问题有多种解决方案。但是您可以使用此解决方案以最少的代码更改来解决此问题...

首先,您必须重定向默认输出流,然后执行您的逻辑,然后在默认输出流上打印您的输出。 只需用这个更新您的主要方法..

public static void main(String arg[]){
    OutputStream os=System.out;
    //Create piped streams
    PipedInputStream pis=new PipedInputStream(2000);
    PipedOutputStream pos=new PipedOutputStream(pis);
    //Change default output stream
    System.setOut(pos);
    //Logic..
    cipher("stack",4);
    //Change default output stream to console
    System.setOut(os);
    //Read output from PipedOutput Stream & print on console
    Scanner sc=new Scanner(System.in);
    String ct=sc.next();
    System.out.print(ct);
}

现在,无论您在 cipher 方法中在标准输出流上打印什么,都不会直接在控制台上打印。

即使您可以将程序的输出写入文件而无需更改方法 cipher

您可以通过执行以下步骤来实现您的目标:
1. 在 cipher 方法的开头创建一个空的 StringBuilder 对象(该对象将保存构成该方法返回的最终 String 的字符序列)。
2.替换表格的每一行代码(其中x代表一个int变量)

System.out.print(Character.toString((char) x));

与以下内容(其中 (a) s 表示上面第 1 部分中提到的 StringBuilder 对象,并且 (b) 此结果行将 x 的 char 表示附加到 s):

s.append((char) x);

3。 StringBuilder 序列完成后,使用以下方法获取该序列的 String 表示(其中 s 是有问题的 StringBuilder 对象):

s.toString();

这是使用上述方法的密码方法的修改版本:

public static String cipher(String input2, Integer number) {
        StringBuilder builder = new StringBuilder(input2.length());
        int k = number;
        int lowerBoundlc = 97;
        int upperBoundlc = 122;
        int lowerBounduc = 65;
        int upperBounduc = 90;
        for (int i = 0; i < input2.length(); i++) {
            char c = input2.charAt(i);
            int j = (int) c;
            if ((lowerBoundlc <= j && j <= upperBoundlc) || (j == 45)) {
                if (j == 45) {
                    builder.append((char) j);
                } else {
                    int addk = j + k;
                    if (addk > upperBoundlc) {
                        int lowercase = addk % upperBoundlc;
                        int resultlc = lowerBoundlc + lowercase -1;
                        builder.append((char) resultlc);
                    } else {
                        builder.append((char) addk);
                    }
                }

            } else {
                if ((lowerBounduc <= j && j <= upperBounduc) || (j == 45)) {
                    int addnewk = j + k;
                    if (addnewk > upperBounduc) {
                        int uppercase = addnewk % upperBounduc;
                        int resultuc = lowerBounduc + uppercase -1;
                        builder.append((char) resultuc);
                    } else {
                        builder.append((char) addnewk);
                    }
                }
            }
        }
        return builder.toString();    
    }

您可以简单地使用连接(“+”运算符)将答案附加到字符串并使用该字符串。 您可以使用 String Builder 来提高性能。