Scala String Trim

时间:2018-03-16 18:03:36

标签: json scala

我试图在我的输入中删除字符串{“$ outer”:{},(从大括号开始并以逗号结尾)但我无法做到。

我的输入如下

{"$outer":{},"size":"10","query":{"$outer":{},"match":{"$outer":{},"_all":{"$outer":{},"query":"VALLE","operator":"and"}}}}

我尝试了以下方法,但两者都没有帮助我。

第一种方法:

val dropString = "\"$outer\":{},"
val payLoadTrim = payLoadLif.dropWhile(_ == dropString).reverse.dropWhile(_ == dropString).reverse

这个没有做任何事情。这是输出:

{"$outer":{},"size":"10","query":{"$outer":{},"match":{"$outer":{},"_all":{"$outer":{},"query":"VALLE","operator":"and"}}}}

第二种方法:

def stripAll(s: String, bad: String): String = {
@scala.annotation.tailrec def start(n: Int): String = 
    if (n == s.length) ""
    else if (bad.indexOf(s.charAt(n)) < 0) end(n, s.length)
    else start(1 + n)

@scala.annotation.tailrec def end(a: Int, n: Int): String =
    if (n <= a) s.substring(a, n)
    else if (bad.indexOf(s.charAt(n - 1)) < 0) s.substring(a, n)
    else end(a, n - 1)

  start(0)
}    

第二个输出:

size":"10","query":{"$outer":{},"match":{"$outer":{},"_all":{"$outer":{},"query":"VALLE","operator":"

和期望的输出:

{"size":"10","query":{"match":{"_all":{"query":"VALLE","operator":"and"}}}

2 个答案:

答案 0 :(得分:3)

您可能想要使用val input = """{"$outer":{},"size":"10","query":{"$outer":{},"match":{"$outer":{},"_all":{"$outer":{},"query":"VALLE","operator":"and"}}}}""" input.replace("\"$outer\":{},", "")

{"size":"10","query":{"match":{"_all":{"query":"VALLE","operator":"and"}}}}

返回:

except OSError as e:
    fixed_image_bytes = image_stream.getvalue() + b'\xff\xd9'
    with io.BytesIO(fixed_image_bytes) as fixed_image_stream:
        image = Image.open(fixed_image_stream)
        image.load()

答案 1 :(得分:0)

如果您需要切断确切的前缀/后缀,可以使用.stripPrefix / .stripSuffix方法:

@ "abcdef".stripPrefix("abc")
res: String = "def"
@ "abcdef".stripSuffix("def")
res: String = "abc"

请注意,如果字符串没有这样的前缀(或后缀),它将保持不变:

@ "abcdef".stripPrefix("foo")
res: String = "abcdef"
@ "abcdef".stripSuffix("buh")
res: String = "abcdef"

有时候从开头(或结束)切断是很重要的,所以如果你使用.replace时,你应该小心并将^...(或...$)添加到正则表达式模式,否则它可能会在中间某处找到匹配并替换它。

奖励:如果您只想检查字符串是否具有给定的前缀/后缀,则可以使用.startsWith / .endsWith方法(加.startsWith也可以使用偏移量)。