Vergelijk reeks patronen

I have one string that contains String s1="1 2 7 8"

now suppose I have two string String s2="1 7 8" and String s3="1 2 8"

dus door die twee string met mijn eerste te vergelijken, zou het true moeten terugkeren.

Maar wanneer ik s1.contanis (s2) doe, wordt false geretourneerd.

Is er een andere gemakkelijke manier om dit soort patronen te vergelijken, zonder ze te splitsen en een voor een te vergelijken?

0
het is similar_text in PHP [ bekijk dit eens ] ... dezelfde vraag hier ook .
toegevoegd de auteur Prasanth, de bron

7 antwoord

Hiermee kunt u controleren of s1 alle elementen uit s2 bevat (gescheiden door een spatie):

Arrays.asList(s1.split(" ")).containsAll(Arrays.asList(s2.split(" ")));

Volledige code:

public class StringContainsNumbers {
    public static void main(String[] args) {
        final String s1 = "1 2 7 8";
        final String s2 = "1 7 8";
        final String s3 = "1 2 8";

        System.out.println(stringContainsNumbers(s1, s2));
        System.out.println(stringContainsNumbers(s1, s3));
    }

    private static boolean stringContainsNumbers(String s1, String s2) {
        return Arrays.asList(s1.split(" ")).containsAll(Arrays.asList(s2.split(" ")));
    }
}
5
toegevoegd
Heel erg bedankt, dit is waar ik naar op zoek was.
toegevoegd de auteur commit, de bron

Bevat controles voor de hele "1 7 8" als tekenreeks in "1 2 7 8" Dus wordt false geretourneerd.

U moet StringTokenizer-methode gebruiken.

1
toegevoegd

s1 bevat zeker geen s2.

wat probeer je te doen ? Als u werkelijke waarden moet vergelijken, splitsen en converteren naar gehele getallen

1
toegevoegd
hij begrijpt dat het vals is. de vraag is hier hoe je dat moet doen. dat hij wil weten of er een bibliotheek is die dit ondersteunt. Hij weet dat het kan worden gedaan door de string te itereren.
toegevoegd de auteur zerocool, de bron

De bevat -methode op String retourneert alleen true als s1 volledig s2 bevat. Met andere woorden

 String s1 = "hello world";
 s1.contains( "llo" );

Zou terugkeren, maar waar

 s1.contains( "ll w" );

zou vals terugkeren.

U moet zowel S1 als S2 tokenize en vervolgens controleren of de elementen s1 alle s2-elementen bevatten.

0
toegevoegd

you can do Google search "Java - String matches() Method" You are going to find many links. One of them is: http://www.tutorialspoint.com/java/java_string_matches.htm

0
toegevoegd

Gebruik de volgende code:

public class Main {
 public static void main(String[] args) {
    String one="1 7 8";
    String two= "1 2 8";
    List fistList= Arrays.asList(one.split(" "));
    List secondList= Arrays.asList(two.split(" "));
    boolean isContainAll=fistList.containsAll(secondList);
    System.out.println(isContainAll);
 }
}
0
toegevoegd

Omdat wanneer u s1.contains (s2) gebruikt, het geen enkele letters in de tekenreeks maar de hele tekenreeks vergelijkt. Als de waarde van s1 bijvoorbeeld "2 1 7 8" is, retourneert s1.contains (s2) true.

0
toegevoegd