我如何删除 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 来提高性能。
我有一个奇怪的问题。我需要收集不同的 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 来提高性能。