从字符串Kotlin中提取数字

时间:2019-11-12 04:51:05

标签: java android kotlin

String.replaceAll未运行,并且在Kotlin中不受支持。因此,我建议一个演示示例,希望对您有所帮助。

var string = "vsdhfnmsdbvfuf121535435aewr"  
string.replace("[^0-9]".toRegex(), "")

8 个答案:

答案 0 :(得分:23)

您还可以利用Kotlin的String.filter:

var string = "vsdhfnmsdbvfuf121535435aewr"
var result = string.filter { it.isDigit() }

我从这里得到的:https://stackoverflow.com/a/57316352

答案 1 :(得分:1)

您的代码运行正常。这里string是不可变的。因此,它的价值无法改变。但是您可以将另一个变量分配给替换的字符串。

fun main(args: Array<String>) {
    var string = "vsdhfnmsdbvfuf121535435aewr"
    var res = string.replace("[^0-9]".toRegex(), "")
    println(res)
}

答案 2 :(得分:1)

replace方法返回一个新的String,而不修改基数。您可以尝试使用此here,它将为您服务。

var s1 = "vsdhfnmsdbvfuf121535435aewr"  
var s2 = s1.replace("[^0-9]".toRegex(), "")
print(s2)

答案 3 :(得分:1)

replace不会使字符串str发生突变,这就是为什么str可以不可变(val)正确的原因。

val str = "vsdhfnmsdbvfuf121535435aewr"
val num = str.replace(Regex("[^0-9]"), "")
println(num)

输出:

  

4545121535435


由于问题的标题为“数字”:如果在字符串中散布了多个数字,则可以使用Regex.findAll。这也是一种更安全的解决方案,因为如果仅删除数字附近的内容,则可能最终会将“ a1b2c3”解释为“ 123”,而不是“ [1、2、3]”。

val str = "vsdhfn4545msdbvfuf121535435aewr"
val numbers = Regex("[0-9]+").findAll(str)
        .map(MatchResult::value)
        .toList()

println(numbers)

输出:

  

[4545,121535435]

答案 4 :(得分:0)

replace函数不会修改您的字符串,但会返回一个新字符串。您的代码会很好:

  • val result = replace("[^0-9]".toRegex(), "")

答案 5 :(得分:0)

尝试以下示例:

代码

  try {
        val p = Pattern.compile("\\d+")
        var m = p.matcher("string1234more567string890")
         while (m.find()) {
           System.out.println(m.group())
          }
      }catch (ex:java.lang.Exception){
      }

答案 6 :(得分:0)

在某些情况下,例如文本中包含格式化的金额,上述答案可能会失败。例如,如果文本为“ Rs.1,00,000.00 ”,而我们仅过滤 digit ,则得到的输出为.100000.00这将是错误的金额。因此最好先提取数字之间的字符串,然后过滤数字和点。

    fun String.getAmount(): String {
    return substring(indexOfFirst { it.isDigit() }, indexOfLast { it.isDigit() } + 1)
        .filter { it.isDigit() || it == '.' }
    }

以下案例将使用上述代码覆盖

  println("Rs. 123".getAmount())
  println("Rs. 123.23".getAmount())
  println("Rs. 123.23/-".getAmount())
  println("INR123.23".getAmount())
  println("123.23INR".getAmount())
  println("$100,000.00".getAmount())
  println("Rs.100,000.00".getAmount())

答案 7 :(得分:0)

试试这个我们会得到结果

val digit:Int = Regex("[^0-9]").replace(bindAyatSearch.ayatSearchSp.selectedItem.toString(), "").toInt()