我有一个奇怪的问题。我需要收集不同的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;
}
谢谢。
答案 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">
MY NAME
</span>
<br/>
<span style="background-color:rgba(0, 0, 0, .5); position: absolute">
IS ABCD
</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来提高性能。