在 Android 中使用 RegEx 分割字符串

2024-03-02

我一直在尝试分开Strings使用正则表达式没有成功。这个想法是将给定的音乐文件元数据与其文件名分开,以便:

"01. Kodaline - Autopilot.mp3"

..会导致..

metadata[0] = "01"
metadata[1] = "Kodaline"
metadata[2] = "Autopilot"

这是我一直尝试以其原始形式使用的正则表达式:

^(.*)\.(.*)\-(.*)\.(mp3|flac)

根据我的阅读,我需要格式化正则表达式String.split(String regex)上班。这是我格式化的正则表达式:

^(.*)\\.(.*)\\-(.*)\\.(mp3|flac)

..这就是我的代码的样子:

String filename = "01. Kodaline - Autopilot.mp3";
String regex = "^(.*)\\.(.*)\\-(.*)\\.(mp3|flac)";

String[] metadata = filename.split(regex);

但我没有收到我预期的结果。你能帮我解决这个问题吗?


您的正则表达式可以很好地匹配输入字符串。你的问题是你使用了split(),它需要一个具有完全不同目的的正则表达式。为了split(),你给它的正则表达式匹配分隔符(分隔符)分隔输入的各个部分;它们与整个输入不匹配。因此,在不同的情况下(不是你的情况),你可以说

String[] parts = s.split("[\\- ]");

正则表达式匹配一个破折号或空格字符。因此,这将在字符串中查找破折号和空格,并返回由破折号和空格分隔的部分。

要使用正则表达式来匹配输入字符串,您需要如下所示:

String filename = "01. Kodaline - Autopilot.mp3";
String regex = "^(.*)\\.(.*)\\-(.*)\\.(mp3|flac)";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(filename);

String[] metadata = new String[4];
if (matcher.find()) {
    metadata[0] = matcher.group(1); // in real life I'd use a loop
    metadata[1] = matcher.group(2);
    metadata[2] = matcher.group(3);
    metadata[3] = matcher.group(4);
    // the rest of your code
}

其中设置metadata到琴弦"01", " Kodaline ", " Autopilot", "mp3",这接近您想要的,除了额外的空格(您可以在正则表达式中查找)。不幸的是,我不认为有内置的Matcher返回一个数组中所有组的函数。

(顺便说一下,在你的正则表达式中,你不需要前面的反斜杠-,但它们是无害的,所以我把它们留在了里面。-通常没有特殊含义,因此不需要转义。但是,在方括号内有一个连字符is特殊,因此如果您想匹配一组字符并且连字符是其中一个字符,则应该使用反斜杠。这就是为什么我在我的split上面的例子。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android 中使用 RegEx 分割字符串 的相关文章

  • 为什么ArrayList没有getSize()而不是size()?

    我在一些 JSP 页面中大量使用 ArrayList 我想像这样访问 ArrayList myArrayList size 但由于对象必须符合 JavaBean 标准 其中myArrayList getMyPropertyName is m
  • Android studio 导入模块按钮缺失

    我已经使用 Eclipse 很长时间了 但我想尝试一下 Android Studio 所以我创建了新项目 现在我想向其中添加 SlidingMenu 库 我发现一些教程说要转到项目结构 单击加号按钮并选择导入模块 但是没有导入模块选项 当我
  • 如何在多行中使用 JavaScript 正则表达式?

    var ss pre aaaa nbbb nccc pre ddd var arr ss match
  • @android的含义

    我想问一下是什么意思 android as in android id android id list 我在不同的 android 示例和教程中看到过它 我也用谷歌搜索过它 我发现的唯一解释是 列表和空 ID 是由 Android 平台为我
  • Java 会话变量

    我听说有些人认为在会话中将信息存储在服务器上是一个坏主意 因为它不安全 因此 在多页面业务流程功能中 应用程序将数据写入数据库 然后在需要时检索信息 在会话中存储私人信息是否一定不安全 只要会话本身安全 在会话中存储属性就不存在安全风险劫持
  • 如何更改使用 Google ReCaptcha 版本 2 时的错误消息?

    当为 Google ReCaptcha 版本 2 选择多张照片时 会显示以下错误消息 需要多个正确的解决方案 请解决更多 如何将错误消息更改为我网站上的自定义消息 这是图像 我认为不可能在服务器端 在谷歌 进行 这可以在客户端通过利用 js
  • 解析JSON数据并将其放入gridview中

    我正在开发一个应用程序 我必须在其中解析JSON数据并且必须将它们放入自定义中gridview 它应该是这样的 到目前为止 我已经在 asynctask 中解析了 JSON 数据并获取了这些值 这是我的代码 private class ge
  • SpannableString 中的 URLSpan

    我正在使用这个例子SpannableString http developer android com resources samples ApiDemos src com example android apis text Link ht
  • java代码的等效vb代码

    谁能告诉我这段Java代码到底做了什么 SecureRandom random SecureRandom getInstance SHA1PRNG byte bytes new byte 20 synchronized random ran
  • Android 中 Admob 的 XML 或 Java 关键字

    我似乎找不到任何有关通过 XML 或 Java 设置 adMob 广告关键字的可靠文档 我已经尝试过中看到的方法this https stackoverflow com questions 5066129 android admob api
  • 当 vbscript.regexp 工作时,VBA RegExp 会导致编译错误

    我正在为 Outlook 2013 的 VBA 编写一个脚本 它使用正则表达式 我发现的每个示例似乎都使用Set regex New RegExp创建一个正则表达式对象 当我尝试这个时 我得到了编译错误 用户定义类型未定义 我设法使用正则表
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • 清单合并失败:需要为 显式指定 android:exported

    我的清单文件有问题 错误消息 清单合并失败 android 需要为 明确指定导出 面向 Android 12 及更高版本的应用需要指定显式值android exported当相应的组件定义了意图过滤器时 有关详细信息 请参阅 https d
  • 在 Exif 中写入 XPKeywords

    我想在 Jpeg 图像中写入 XPKeywords 到目前为止 我正在使用 Sansaleen java api 在 Jpeg 图像中写入 Exif 标签 我能够编写大多数标签 例如主题 评论 作者 评级 但无法编写 Windows XP
  • RecyclerView 来自 Firebase 的部分和数据

    您好 我正在开发一个应用程序 在其中我必须使用 Firebase 填充数据回收器视图 准备就绪 现在我想做的是用 data firebase 填写一个 recyclerview 但有一些部分将成为托管 data firebase 的父级 我
  • 将 AutomationID 与 ListView 结合使用

    我正在尝试将 AutomationId 附加到列表视图中的项目 理想情况下 将项目名称绑定到显示的项目
  • Android BottomNavigationView 与自定义视图作为图标[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试 Android 支持库中的新 BottomNavigationView 对于其中一个菜单项 我希望有一个自定义视图 以便我
  • 是否可以从外部闪存驱动器运行 java (jdk-windows)、Eclipse (indigo) 和 Android-sdk 进行 Android 应用程序开发

    我想知道我们是否可以通过在外部闪存驱动器上保存所需的软件来在我们使用的任何计算机上开发我们的android应用程序 我的意思是在闪存驱动器上安装java eclipse和android sdk 所以最后我们可以将闪存带到任何地方计算机并在任
  • 找不到 `activityViewModels()` Hilt Android

    我在我的项目中使用 Hilt 和 MVVM 我想要一个viewModel from activityViewModel在 2 个活动中使用相同的内容 但我的 Android Studio 说未解析的参考 我的应用程序 build gradl
  • 应用服务器如何注入私有字段?

    我看到这个问题 注入私有 包或公共字段或提供 setter https stackoverflow com questions 2021716 inject into private package or public field or p

随机推荐