用于联合两个字符串的Java String实用程序/方法

时间:2017-06-15 05:04:59

标签: java string

是否有任何辅助方法或实用程序实际上给了我两个字符串的联合。 例如,如果我有两个字符串如下:

String s1 = "Isabella,tom,hardy";
String s2 = "Isabella,tom,hardy,victor,smith";

我正在寻找一个解决方案,它将以两个字符串作为输入并输出结果如下:

General syntax:  s1.{method/utility}(s2);
output : Isabella,tom,hardy,victor,smith

9 个答案:

答案 0 :(得分:6)

首先,JDK没有提供任何方法或实用程序来直接解决问题。

第二次,只是为了这个简单的实用程序导入第三方jar或依赖项不是明智的选择。

在这种情况下,编写自己的目的方法总是明智的选择。

public static String mergeString(String s1, String s2) {
        //check for null as the method doesnt fall in NPE
        if(s1 == null || s2 == null) {
            return null;
        }

        //split the given String to some list
        List<String> s1List = Arrays.asList(s1.split(","));
        List<String> s2List = Arrays.asList(s2.split(","));

        //get a Set and add the list items to it. LinkedHashSet
        //is used to maintain the given order.
        Set<String> stringSet = new LinkedHashSet<>(s1List);
        stringSet.addAll(s2List);

        //Then join them using java 8 provided Utility
        return String.join(",", stringSet);
    }

NB:正如您在评论中提到的,您可能只需要在项目中使用此类型的实用程序一次。但尽管如此,这种逻辑应该与您的业务方法分开。这将使您的代码更加干净和可读。

答案 1 :(得分:2)

您可以使用org.springframework.util.StringUtils

添加maven依赖关系spring-core

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>3.2.8.RELEASE</version>
</dependency>

使用StringUtils:

public static void main(String[] args) {
        String s1 = "Isabella,tom,hardy";
        String s2 = "Isabella,tom,hardy,victor,smith";
        String[] outputArr=StringUtils.mergeStringArrays(s1.split(","),s2.split(","));
        String output=StringUtils.arrayToCommaDelimitedString(outputArr);
        System.out.println(output);
    }

<强>输出:

Isabella,tom,hardy,victor,smith

答案 2 :(得分:2)

public void unionString(String s1, String s2){

        String[] s1Ar = s1.split(",");
        String[] s2Ar = s2.split(",");

        HashSet<String> set = new HashSet<String>();

        for(int i=0;i<s1Ar.length;i++){
            set.add(s1Ar[i]);
        }

        for(int i=0;i<s2Ar.length;i++){
            set.add(s2Ar[i]);
        }

        Iterator<String> it = set.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }  
    } 

答案 3 :(得分:1)

你可以使用LinkedHashSet来维护插入顺序以获得所需的输出。下面是我的代码:

 public class UnionJava {
        static LinkedHashSet<String> hashSetString = new LinkedHashSet<>();
        static String s1 = "Isabella,tom,hardy"; static String s2 = "Isabella,tom,hardy,victor,smith";
        public static void main(String args[]){
            String[] set1 = s1.split(","); String[] set2 = s2.split(",");
            for(int i=0; i< set1.length;i++){
                hashSetString.add(set1[i]);
            }
            for(int i=0;i<set2.length;i++){
                hashSetString.add(set2[i]);
            }
            int j=0;
            for(Iterator i = hashSetString.iterator(); i.hasNext();){
                if(j==0){
                    System.out.print(i.next());
                    j++;
                }else{
                    System.out.print(","+i.next());
                }
            }
        }
    }

答案 4 :(得分:1)

这是一个将两个字符串结合起来的方法。您也可以传递一个布尔标志来指示区分大小写。

public static String union (String s1, String s2, boolean caseInsensitive)
{
    // if either string is null, union is the other string
    if (s1 == null)
        return s2;

    if (s2 == null)
        return s1;

    // use linked set to keep ordering
    Set<String> unique = new LinkedHashSet<>();

    // put all words from string 1 into the set
    for (String word : s1.split(","))
    {
        word = word.trim(); // remove surrounding space on word

        if (caseInsensitive)
        {
            word = word.toLowerCase();
        }
        unique.add(word);
    }

    // put all words from string 2 into the set
    for (String word : s2.split(","))
    {
        word = word.trim(); // remove surrounding space on word

        if (caseInsensitive)
        {
            word = word.toLowerCase();
        }
        unique.add(word);
    }

    // get back the format of comma delimiter for the union
    String ret = unique.toString().replaceAll("[\\[\\] ]", "");
    return ret;
}

<强>用法

public static void main(String args[])
{   
    String s1 = "Isabella,tom,hardy";
    String s2 = "Isabella,tom,hardy,victor,smith";

    String union = union(s1, s2, false);
    System.out.println(union);
}

<强>输出

Isabella,tom,hardy,victor,smith

答案 5 :(得分:0)

使用java api,您可以尝试:

public class StringTest {

private String string1 ="";
private String string2 ="";
private List<String> array1 = new ArrayList<String>();
private List<String> array2 = new ArrayList<String>();
private String[] stringa1;
private String[] stringa2;
private int output3 = 0;
private int output4 = 0;

public static void main(String[] args) {
 new StringTest().startApp();
}

private void startApp() {
 string1 = "Isabella,tom,hardy";
 stringa1 = string1.split("\\s+"); //array to split

 string2 = "Isabella,tom,hardy,victor,smith";
 stringa2 = string2.split("\\s+");

 for(int o = 0; o<stringa1.length; o++) {
  array1.add(stringa1[o]);  //adding to arraylist
 }
 for(int o = 0; o<stringa2.length; o++) {
  array2.add(stringa2[o]);
 }

  for(int outP = 0; outP<array2.size()+array1.size(); outP++) {
  for(output4 = 0; output4<array2.size(); output4++) { //iterating and removing double elements 
   for(output3 = 0; output3<array1.size(); output3++) {
    if(array1.size() > array2.size() && array2.get(output4).equalsIgnoreCase(array1.get(output3))) {
     array1.remove(array1.get(output3));
    }
    if(array1.size() < array2.size() && array2.get(output4).equalsIgnoreCase(array1.get(output3))) {
     array2.remove(array2.get(output4));
    }
   }
  }
 }
 array1.addAll(array2); //merging the lists

 for(String outPres1 : array1) {
  result += " " + outPres1;
 } 
 System.out.println("This is the output: " + result);
}

答案 6 :(得分:0)

使用LinkedHashSet进行无完整性检查的简短版本。

public void printUnion() {
    String s1 = "Isabella,tom,hardy";
    String s2 = "Isabella,tom,hardy,victor,smith";

    Set<String>mySet = new LinkedHashSet<>();
    mySet.addAll(Arrays.asList(s1.split(",")));
    mySet.addAll(Arrays.asList(s2.split(",")));
    mySet.stream().forEach(System.out::println);
}

答案 7 :(得分:0)

arr[row][col]

答案 8 :(得分:0)

嗯,有人必须提供流解决方案:

Stream.of(s1, s2)
        .flatMap(Pattern.compile(",")::splitAsStream)
        .distinct()
        .collect(Collectors.joining(","))