Skip to content

Commit 33b8fe3

Browse files
Add String.removeIf
1 parent 9ea640c commit 33b8fe3

File tree

5 files changed

+23
-8
lines changed

5 files changed

+23
-8
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
### Added
66

7+
- `String.removeIf`
8+
79
### Changed
810

911
### Deprecated

kotlin-stdlib/api/android/kotlin-stdlib.api

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,12 @@ public final class com/javiersc/kotlin/stdlib/StringsKt {
170170
public static final fun notContain (Ljava/lang/CharSequence;Lkotlin/text/Regex;)Z
171171
public static synthetic fun notContain$default (Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z
172172
public static final fun remove (Ljava/lang/String;Ljava/lang/String;Z)Ljava/lang/String;
173-
public static final fun remove (Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
173+
public static final fun remove (Ljava/lang/String;[Ljava/lang/String;Z)Ljava/lang/String;
174174
public static synthetic fun remove$default (Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Ljava/lang/String;
175+
public static synthetic fun remove$default (Ljava/lang/String;[Ljava/lang/String;ZILjava/lang/Object;)Ljava/lang/String;
175176
public static final fun removeDuplicateEmptyLines (Ljava/lang/String;)Ljava/lang/String;
177+
public static final fun removeIf (Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;)Ljava/lang/String;
178+
public static synthetic fun removeIf$default (Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/String;
176179
public static final fun replace (Ljava/lang/String;[Lkotlin/Pair;)Ljava/lang/String;
177180
}
178181

kotlin-stdlib/api/jvm/kotlin-stdlib.api

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,12 @@ public final class com/javiersc/kotlin/stdlib/StringsKt {
176176
public static final fun notContain (Ljava/lang/CharSequence;Lkotlin/text/Regex;)Z
177177
public static synthetic fun notContain$default (Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z
178178
public static final fun remove (Ljava/lang/String;Ljava/lang/String;Z)Ljava/lang/String;
179-
public static final fun remove (Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
179+
public static final fun remove (Ljava/lang/String;[Ljava/lang/String;Z)Ljava/lang/String;
180180
public static synthetic fun remove$default (Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Ljava/lang/String;
181+
public static synthetic fun remove$default (Ljava/lang/String;[Ljava/lang/String;ZILjava/lang/Object;)Ljava/lang/String;
181182
public static final fun removeDuplicateEmptyLines (Ljava/lang/String;)Ljava/lang/String;
183+
public static final fun removeIf (Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;)Ljava/lang/String;
184+
public static synthetic fun removeIf$default (Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/String;
182185
public static final fun replace (Ljava/lang/String;[Lkotlin/Pair;)Ljava/lang/String;
183186
}
184187

kotlin-stdlib/common/main/kotlin/com/javiersc/kotlin/stdlib/Strings.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,27 @@ public fun String.replace(vararg oldToNewValues: Pair<String, String>): String {
1616
public inline fun String.remove(value: String, ignoreCase: Boolean = false): String =
1717
replace(oldValue = value, newValue = "", ignoreCase = ignoreCase)
1818

19-
public fun String.remove(vararg values: String): String {
19+
public fun String.remove(vararg values: String, ignoreCase: Boolean = false): String {
2020
var result = this
2121
for (value in values) {
22-
result = result.replace(value, "")
22+
result = result.remove(value = value, ignoreCase = ignoreCase)
2323
}
2424
return result
2525
}
2626

27+
public fun String.removeIf(
28+
value: String,
29+
ignoreCase: Boolean = false,
30+
block: (String) -> Boolean,
31+
): String = if (block(this)) remove(value = value, ignoreCase = ignoreCase) else this
32+
2733
public inline fun CharSequence?.isNotNullNorBlank(): Boolean {
2834
contract { returns(true) implies (this@isNotNullNorBlank != null) }
29-
3035
return !isNullOrBlank()
3136
}
3237

3338
public inline fun CharSequence?.isNotNullNorEmpty(): Boolean {
3439
contract { returns(true) implies (this@isNotNullNorEmpty != null) }
35-
3640
return !isNullOrEmpty()
3741
}
3842

@@ -45,13 +49,11 @@ public inline fun CharSequence.notContain(regex: Regex): Boolean = !contains(reg
4549

4650
public inline fun String?.isNotNullNorBlank(): Boolean {
4751
contract { returns(true) implies (this@isNotNullNorBlank != null) }
48-
4952
return !isNullOrBlank()
5053
}
5154

5255
public inline fun String?.isNotNullNorEmpty(): Boolean {
5356
contract { returns(true) implies (this@isNotNullNorEmpty != null) }
54-
5557
return !isNullOrEmpty()
5658
}
5759

kotlin-stdlib/common/test/kotlin/com/javiersc/kotlin/stdlib/StringsTest.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,13 @@ internal class StringsTest {
3737
@Test
3838
fun string_remove() {
3939
assertTrue { "Hello, World".remove("Hello, ") == "World" }
40+
assertTrue { "Hello, World".remove("hello, ", ignoreCase = true) == "World" }
4041
assertTrue { "Hello, World".remove("bla") == "Hello, World" }
4142
assertTrue { "Hello, World".remove("llo", "rld") == "He, Wo" }
43+
assertTrue { "Hello, World".remove("Hel", "Wor", ignoreCase = false) == "lo, ld" }
44+
assertTrue { "Hello, World".removeIf("Hello, ") { it.startsWith("Hel") } == "World" }
45+
assertTrue { "Hello, World".removeIf("H") { it.startsWith("W") } == "Hello, World" }
46+
assertTrue { "Hello, World".removeIf("hello, ", true) { it.startsWith("Hel") } == "World" }
4247
}
4348

4449
@Test

0 commit comments

Comments
 (0)