【问题标题】:How to split a string by "/" and "//"?如何用“/”和“//”分割字符串?
【发布时间】:2013-06-12 18:41:05
【问题描述】:

我正在尝试为 Wavefront Object 文件创建一个基本的模型查看器,文件的部分读取包括分割每一行。面是根据斜线定义的。这些是可以从维基百科解析的不同类型的面孔:

  f v1 v2 v3 v4 ... <- Face built of vertices
  f v1/vt1 v2/vt2 v3/vt3 ... <- Face built of vertices + textures
  f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ... <- Face built of vertices, textures, and normals
  f v1//vn1 v2//vn2 v3//vn3 ... <- Face built of vertices and normals

我一直在逐步阅读每一行,如果它以“f”开头,我会在删除整行的前两个字符以创建面部后将其发送到另一个方法。

例如f v1 v2 v3 会转到 v1 v2 v3

当我必须处理带有斜杠的行时,我认为我将它们拆分错误,因为我没有得到正确的结果。我目前正在使用这两个拆分:

   string.split("/");
   string.split("//");

这是否会产生问题,因为 split 参数应该是一个正则表达式,而我试图按(我相信是)正则表达式中常用的字符进行拆分?

【问题讨论】:

  • / 不是 Java 正则表达式中的特殊字符。你在想\
  • 如果你先用/分割你会弄乱//分隔符;你可能应该用// 分割之前 你用/ 分割(假设你在同一个字符串中有/// 要分割)。
  • I think I'm splitting them wrong as I'm not getting proper results 你能展示你目前的结果和预期的结果吗?要编辑您的问题,请单击问题下方的“编辑”按钮或此处 [edit]。
  • anything 上进行拆分不太可能产生您想要的结果;你那里也有空间。您可能希望使用捕获进行模式匹配。
  • 当用文字而不是正则表达式分割时,我建议使用Pattern.quote()。这样,如果分隔符字符串中的任何字符都是特殊的正则表达式字符,则没有问题。

标签: java regex split wavefront


【解决方案1】:

斜线在正则表达式中没有什么特别之处。试试这个:

for (String facePart : input.replaceAll("^f "), "").split(" ")) {
    String[] data = facePart.split("/");
    String vertex = data[0];
    String texture = data.length > 1 ? data[1] : "";
    String normal = data.length > 2 ? data[2] : "";
    // do something with the info
    // variables will be blank if missing from input
}

【讨论】:

    猜你喜欢
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 2017-11-30
    • 2013-02-15
    • 2018-09-08
    相关资源
    最近更新 更多