我如何删除System.out.print并获得唯一的返回

时间:2017-02-19 01:18:12

标签: java return system.out

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

我该怎么做?

以下程序是“凯撒的密码”:

    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;    
}

谢谢。

6 个答案:

答案 0 :(得分:0)

您可以使用+ =或StringBuilder类将这些字符串附加到一起,而不是严格打印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);

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

答案 1 :(得分:0)

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();
}

答案 2 :(得分:0)

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

根据您的需要设置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); 

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

您可以通过执行以下步骤来实现目标:
1.在密码方法的开头创建一个空的<div style="text-align:left; font-size: 20vh; color:white; line-height: 18.2vh; padding: 5vw; margin-bottom:-15px;"> <span style="background-color:rgba(0, 0, 0, .5); position: absolute"> &nbsp;MY NAME </span> <br/> <span style="background-color:rgba(0, 0, 0, .5); position: absolute"> &nbsp;IS ABCD&nbsp; </span> </div>对象(该对象将保存形成由该方法返回的最终StringBuilder的字符序列。)
2.替换表单的每个代码行(其中x表示String变量)

int

具有以下内容(其中(a)s表示上面第1部分中提到的System.out.print(Character.toString((char) x)); 对象,并且(b)此结果行将x的StringBuilder表示附加到s):

char

3。完成s.append((char) x); 序列后,使用以下方法获取该序列的StringBuilder表示形式(其中s是相关的String对象):

StringBuilder

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

s.toString();

答案 5 :(得分:0)

你可以使用连接('+'运算符)&amp;添加到字符串的答案。使用那个字符串。 您可以使用String Builder来提高性能。