Desen dizesini karşılaştırın

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"

bu yüzden bu iki dizgiyi ilk dizimle karşılaştırarak doğru döndürmelidir.

Ancak s1.contanis (s2) yaptığımda yanlış döndürür.

Bu tür kalıpları karşılaştırmanın, her birini bölmeden ve tek tek karşılaştırmadan başka kolay yolu var mı?

0
bu [href="http://php.net/similar_text" rel="nofollow noreferrer"> phpp [ bunu kontrol et ] ... aynı soru burada da .
katma yazar Prasanth, kaynak

7 cevap

Bu, s1 öğesinin s2 öğesindeki tüm öğeleri (boşlukla ayrılmış) içerip içermediğini denetleme işini yapar:

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

Komple kod:

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
katma
Çok teşekkür ederim, aradığım şey buydu.
katma yazar commit, kaynak

"1 7 8" 'nin tamamı için "1 2 7 8" dizgesindeki denetimleri içerir.

StringTokenizer Metodunu kullanmalısınız.

1
katma

s1 kesinlikle s2 içermez.

ne yapmaya çalışıyorsun ? Gerçek değerleri karşılaştırmanız gerekirse, bölün ve tamsayılara dönüştürün

1
katma
yanlış döndüğünü anlıyor. Buradaki soru bunun nasıl yapılacağıdır. Bunu destekleyen herhangi bir kütüphane olup olmadığını bilmek istiyor. Dizeyi yineleyerek yapılabileceğini biliyor.
katma yazar zerocool, kaynak

String üzerindeki içerir yöntemi, yalnızca s1 tamamen s2 içeriyorsa true değerini döndürür. Diğer bir deyişle

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

Doğru dönecekti ama

 s1.contains( "ll w" );

yanlış dönecekti.

Hem s1 hem de s2'yi tokenize etmeniz ve s1 öğelerinin tüm s2 öğelerini içerdiğini kontrol etmeniz gerekir.

0
katma

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
katma

Aşağıdaki kodu kullanın:

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
katma

Çünkü s1.contains (s2) kullandığınızda dizedeki tek harfleri değil dizenin tamamını karşılaştırır. Örneğin, s1'in değeri "2 1 7 8" ise, s1.contains (s2) true değerini döndürür.

0
katma