【发布时间】:2017-05-29 23:50:58
【问题描述】:
我是 stackoverflow 的新手,这是我关于 stackoverflow 的第一个问题。
我有以下问题:
以这样的方式打印 Output1 和 Output2 的值,Output1 应打印 String1 中存在但 String2 中不存在的所有字符,Output2 应打印 String2 中存在但 String1 中不存在的所有字符。
示例: 如果 String1: ABC 和 String: BC 那么 Output1: A 和 Output2:
如果 String1: BC 和 String: BANGALORE 那么 Output1: C 和 Output2: ANGALORE
我知道这个问题类似于 Remove characters from the second string which are present in the first string 和 Given two strings, str1 and str2 as input, remove all chars from str1 that appear in str2 但在这里我想将 String1 和 String2 的结果作为两个不同的字符串 Output1 和 Output2
我尝试了下面的程序来实现这一点,但不确定这是否是一个好的解决方案,因为我需要四个 for 循环来获得结果。
package com.test.java.program;
import java.util.Scanner;
public class PrintString {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter first input as a string: ");
String str1 = scanner.nextLine();
System.out.println("Enter first input as a string: ");
String str2 = scanner.nextLine();
System.out.println(printStringOutput(str1, str2));
}
private static String printStringOutput(String str1, String str2){
String strTemp1 = str1;
int strLen1 = str1.length();
int strLen2 = str2.length();
for(int i=0; i<strLen1; i++){
for(int j=0; j<strLen2; j++){
if(str1.charAt(i) == (str2.charAt(j))){
str1 = str1.replace(str1.charAt(i), '\u0000');
}
}
}
for(int i=0; i<strLen2; i++){
for(int j=0; j<strLen1; j++){
if(str2.charAt(i) == (strTemp1.charAt(j))){
str2 = str2.replace(str2.charAt(i), '\u0000');
}
}
}
return "Output1: " + str1 + "\nOutput2: " + str2;
}
}
我知道我们也可以使用正则表达式实现相同的结果,但不知道该怎么做。有人可以为这个问题提供更好的解决方案吗?
我假设给定的输入是字符串并且不对输入执行任何验证。
谢谢。
【问题讨论】:
-
“有人可以提供更好的解决方案吗” -- 这不是 StackOverflow 的工作方式。请访问help center 并阅读How to Ask。什么是更好的”?目前什么不起作用?
-
“我有个问题”?这是你在做作业时试图在这里寻求帮助的混淆方式吗?
-
@clearlight:实际上这个问题是我工作场所的一位同事问我的,我想出了上述解决方案。我知道这是正确的方法,但不是获得所需输出的有效方法。
-
@Jim Garrison :这工作得非常好,但我正在寻找一种解决方案,它在性能方面会更好,正如 Andreas 所回答的那样。我错过了在我的问题中提到“在性能方面”。 :(
-
那么问题在这里是题外话,属于Code Review