2015-12-15 4 views
6

Ich möchte überprüfen, ob eine Zeichenfolge eine bestimmte Teilzeichenfolge n mal enthält. Ich weiß, was ich tun kann:Wie kann sichergestellt werden, dass ein String genau n-mal einen Teilstring hat?

Assertions.assertThat(myString).contains("xyz");

Oder sogar Assertions.assertThat(myString).containsOnlyOnce("xyz");

Aber wie kann ich dies für n-mal gewährleisten?

habe ich versucht, so etwas wie:

Assertions.assertThat(myString).areExactly(n, myString.contains("xyz")); aber leider ist dies nicht übersetzbar.

Irgendwelche Ideen?

+0

Das ist knifflig übrigens. Was ist mit 'assertThat (" aaa "). Sind exactly (2," aa ")'? Ist das wahr? – Tunaki

+0

@Tunaki Nein, das kompiliert nicht einmal –

+1

@JoelCostigliola Ich weiß, dass es nicht kompiliert. Es ging nicht darum, das Kompilieren zu machen, sondern darum, was es zurückgeben sollte. Ist '" aa "' 2 oder 1 Mal in '" aaa "'? Deshalb sagte ich, es sei schwierig. – Tunaki

Antwort

6

Sie suchen wahrscheinlich für StringUtils.countMatches

Zählt die Anzahl der Vorkommen eines Strings in einem anderen

+0

Und eine andere Bibliothek ... * seufzt * Keine aspectj/junit Lösung allein? – Sorona

+0

@Kayaman Ich glaube, er hat sich tatsächlich auf 'assertj' Bibliothek (die Bibliothek, die er verwendet, um Behauptungen zu testen), nicht' aspectj'. :-) Und unter diesem Gesichtspunkt (und wenn man bedenkt, wie viele verschiedene Assertions 'assertj' bereits implementiert haben), wäre es praktisch,' containsTimes (int n, String expected) 'zusätzlich zu' containsOnlyOnce (String expected) 'zu haben . – djxak

0

Sie so etwas wie tun könnte:

 String testString = "XXwwYYwwLOK"; 
     int count = 0; 
     while (testString.contains("ww")) { 
      count++; 
      int index = testString.indexOf("ww"); 
      if(index + 1 == testString.length()){ 
       break; 
      } 
      testString = testString.substring(index + 1); 
     } 

habe ich nicht getestet Dieser Code sollte aber funktionieren.

0

Der AssertJ Weg wäre, eine Condition zu verwenden, aber es erfordert ein wenig Arbeit, es zu implementieren, also würde ich StringUtils.countMatches wie Rahul Tripathi vorgeschlagen verwenden.

Verwandte Themen