Java 我在这种方法中做错了什么?(使用StringBuilder从4个字符串创建新词)
我应该在我的主方法(s1、s2、s3和s4——主方法在测试后运行良好)中从扫描仪中获取4个字符串,并将其称为: -->混凝土(s1、s2、s3、s4) 方法名为Java 我在这种方法中做错了什么?(使用StringBuilder从4个字符串创建新词),java,Java,我应该在我的主方法(s1、s2、s3和s4——主方法在测试后运行良好)中从扫描仪中获取4个字符串,并将其称为: -->混凝土(s1、s2、s3、s4) 方法名为concat,可能有误导性,因为我不仅仅想要s1+s2+s3+s4。我真正需要的是从s1开始,然后添加s2、s3和s4中尚未出现在结果字符串中的字符。例如,如果s1为“drain”,而s2为“dane”,则处理s2后的部分结果将为“draine”,因为d、a和n已存在于结果字符串中 方法如下: public static void con
concat
,可能有误导性,因为我不仅仅想要s1+s2+s3+s4
。我真正需要的是从s1
开始,然后添加s2
、s3
和s4
中尚未出现在结果字符串中的字符。例如,如果s1
为“drain”,而s2
为“dane”,则处理s2
后的部分结果将为“draine”,因为d
、a
和n
已存在于结果字符串中
方法如下:
public static void concat(String s1, String s2, String s3, String s4) {
String str;
StringBuilder createdWord = new StringBuilder();
for (int i = 0; i < s1.length(); i++) {
char c = s1.charAt(i);
for (int j = 0; j < createdWord.length(); j++) {
if (createdWord.charAt(j) != c)
createdWord.append(c);
}
}
for (int i = 0; i < s2.length(); i++) {
char c = s2.charAt(i);
for (int j = 0; j < createdWord.length(); j++) {
if (createdWord.charAt(j) != c)
createdWord.append(c);
}
}
for (int i = 0; i < s3.length(); i++) {
char c = s3.charAt(i);
for (int j = 0; j < createdWord.length(); j++) {
if (createdWord.charAt(j) != c)
createdWord.append(c);
}
}
for (int i = 0; i < s4.length(); i++) {
char c = s4.charAt(i);
for (int j = 0; j < createdWord.length(); j++) {
if (createdWord.charAt(j) != c)
createdWord.append(c);
}
}
str = createdWord.toString();
System.out.println(str);
}
公共静态void concat(字符串s1、字符串s2、字符串s3、字符串s4){
字符串str;
StringBuilder createdWord=新建StringBuilder();
对于(int i=0;i
当我尝试打印(str)时,我得到一个空白输出。我确信有一种方法可以使这更简单
基于清晰、简单和/或更简单的解决方案,我会接受答案。提前谢谢 问题出在有for循环的行中:
for (int j = 0; j < createdWord.length(); j++)
for(int j=0;j
由于createdWord刚刚初始化,它的长度为零(0),因此createdWord.length()=0,并且永远不会到达for循环中的代码。
你应该设法解决这个问题
编辑
这就是我重构concat方法的简单方法。我还为测试提供了一个main和4个字符串。根据OP评论,预期系统输出为“drainemv”
publicstaticvoidmain(字符串[]args){
字符串str1=“排放”;
字符串str2=“丹麦”;
字符串str3=“main”;
字符串str4=“vain”;
concat(str1、str2、str3、str4);
}
公共静态void concat(字符串s1、字符串s2、字符串s3、字符串s4){
字符串str;
StringBuilder createdWord=新建StringBuilder();
对于(int i=0;i
我相信问题已经确定,但这里有一个更简单的方法:
String s1 = "bla";
String s2 = "yata";
String s3 = "test";
String s4 = "moretest";
String[] sr = new String[]{s1, s2, s3, s4};
StringBuilder sbNewWord = new StringBuilder();
sbNewWord.append(sr[0]);
for(int ndx=1; ndx<sr.length; ndx++) {
for(char c : sr[ndx].toCharArray()) {
if(sbNewWord.toString().indexOf(c) == -1) {
sbNewWord.append(c);
}
}
}
String s1=“bla”;
字符串s2=“yata”;
字符串s3=“测试”;
字符串s4=“moretest”;
String[]sr=新字符串[]{s1、s2、s3、s4};
StringBuilder sbNewWord=新StringBuilder();
sbNewWord.append(sr[0]);
对于(int ndx=1;ndx使用一些Java8特性,这里是您可以做到的方法。
LinkedHashSet保留插入顺序
import java.util.*;
class Test003 {
public static void main(String[] args) throws java.lang.Exception {
String s1 = "test";
String s2 = "test24m";
String s3 = "test1";
String s4 = "test3";
LinkedHashSet<Character> hs = new LinkedHashSet<Character>();
hs.addAll(Arrays.asList(s1.chars().mapToObj(c -> (char) c).toArray(Character[]::new)));
hs.addAll(Arrays.asList(s2.chars().mapToObj(c -> (char) c).toArray(Character[]::new)));
hs.addAll(Arrays.asList(s3.chars().mapToObj(c -> (char) c).toArray(Character[]::new)));
hs.addAll(Arrays.asList(s4.chars().mapToObj(c -> (char) c).toArray(Character[]::new)));
StringBuilder b = new StringBuilder();
hs.forEach(b::append);
System.out.println(b);
}
}
import java.util.*;
类Test003{
公共静态void main(字符串[]args)引发java.lang.Exception{
字符串s1=“测试”;
字符串s2=“test24m”;
字符串s3=“test1”;
字符串s4=“test3”;
LinkedHashSet hs=新LinkedHashSet();
addAll(Arrays.asList(s1.chars().mapToObj(c->(char)c).toArray(Character[]::new));
addAll(Arrays.asList(s2.chars().mapToObj(c->(char)c).toArray(Character[]::new));
addAll(Arrays.asList(s3.chars().mapToObj(c->(char)c).toArray(Character[]::new));
addAll(Arrays.asList(s4.chars().mapToObj(c->(char)c).toArray(Character[]::new));
StringBuilder b=新的StringBuilder();
hs.forEach(b::追加);
系统输出打印ln(b);
}
}
下面是如何在没有Java8特性的情况下实现它
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashSet;
public class Test004 {
public static void main(String[] args) throws java.lang.Exception {
String s1 = "test";
String s2 = "test24m";
String s3 = "test1";
String s4 = "test3";
LinkedHashSet<Character> hs = new LinkedHashSet<Character>();
hs.addAll(Arrays.asList(toCharacterArray(s1.toCharArray())));
hs.addAll(Arrays.asList(toCharacterArray(s2.toCharArray())));
hs.addAll(Arrays.asList(toCharacterArray(s3.toCharArray())));
hs.addAll(Arrays.asList(toCharacterArray(s4.toCharArray())));
StringBuilder b = new StringBuilder();
Iterator<Character> it = hs.iterator();
while (it.hasNext()){
b.append(it.next());
}
System.out.println(b);
}
private static Character[] toCharacterArray(char[] c){
Character[] result = new Character[c.length];
for (int i=0; i<c.length; i++){
result[i] = c[i];
}
return result;
}
}
导入java.util.array;
导入java.util.Iterator;
导入java.util.LinkedHashSet;
公共类Test004{
公共静态void main(字符串[]args)引发java.lang.Exception{
字符串s1=“测试”;
字符串s2=“test24m”;
字符串s3=“test1”;
字符串s4=“t
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashSet;
public class Test004 {
public static void main(String[] args) throws java.lang.Exception {
String s1 = "test";
String s2 = "test24m";
String s3 = "test1";
String s4 = "test3";
LinkedHashSet<Character> hs = new LinkedHashSet<Character>();
hs.addAll(Arrays.asList(toCharacterArray(s1.toCharArray())));
hs.addAll(Arrays.asList(toCharacterArray(s2.toCharArray())));
hs.addAll(Arrays.asList(toCharacterArray(s3.toCharArray())));
hs.addAll(Arrays.asList(toCharacterArray(s4.toCharArray())));
StringBuilder b = new StringBuilder();
Iterator<Character> it = hs.iterator();
while (it.hasNext()){
b.append(it.next());
}
System.out.println(b);
}
private static Character[] toCharacterArray(char[] c){
Character[] result = new Character[c.length];
for (int i=0; i<c.length; i++){
result[i] = c[i];
}
return result;
}
}