在 Java 中通过正则表达式查找最后一个索引

2023-11-27

我有一根绳子%/O^/O%/O。我想找到最后一个 / 来分割字符串。第一次尝试是:\/[POL]$但这让它包含了"O"这是显而易见的。有人给点建议吗?


我同意使用标准 String.lastIndexOf() 方法是最好的做法,但我最近使用了 Regex 部分(即,我想找到字符串中的最后一个非字母数字字符)。

我自己写了它,并想与大家分享,希望它能对其他人有所帮助:

/**
 * Indicates that a String search operation yielded no results.
 */
public static final int NOT_FOUND = -1;

/**
 * Version of lastIndexOf that uses regular expressions for searching.
 * 
 * @param str String in which to search for the pattern.
 * @param toFind Pattern to locate.
 * @return The index of the requested pattern, if found; NOT_FOUND (-1) otherwise.
 */
public static int lastIndexOfRegex(String str, String toFind)
{
    Pattern pattern = Pattern.compile(toFind);
    Matcher matcher = pattern.matcher(str);
    
    // Default to the NOT_FOUND constant
    int lastIndex = NOT_FOUND;
    
    // Search for the given pattern
    while (matcher.find())
    {
        lastIndex = matcher.start();
    }
    
    return lastIndex;
}

/**
 * Finds the last index of the given regular expression pattern in the given string,
 * starting from the given index (and conceptually going backwards).
 * 
 * @param str String in which to search for the pattern.
 * @param toFind Pattern to locate.
 * @param fromIndex Maximum allowed index.
 * @return The index of the requested pattern, if found; NOT_FOUND (-1) otherwise.
 */
public static int lastIndexOfRegex(String str, String toFind, int fromIndex)
{
    // Limit the search by searching on a suitable substring
    return lastIndexOfRegex(str.substring(0, fromIndex), toFind);
}

此外,通过首先反转输入字符串,然后获取第一组的结束索引(而不是遍历所有组),可以使此方法更快。

但要做到这一点,你也必须扭转这种模式;在某些情况下这可能很简单(例如我搜索单个字符的情况),但在其他情况下可能会出现问题。

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

在 Java 中通过正则表达式查找最后一个索引 的相关文章

随机推荐

  • 将ios 5模拟器安装到xcode 5.1?

    我目前在 Mac 10 8 5 上使用 xcode 5 1 但我无法在这个 xcode 中安装 ios 模拟器 有人告诉我如何安装ios 5模拟器吗 伙计 这个really今天 当我从 Xcode 5 0 升级到 Xcode 5 1 并发现
  • 为什么 String.IndexOf 和 String.Contains 在提供阿拉伯文本时不一致?

    我想知道我是否在 NET Framework 中发现了错误 或者我是否不明白某些内容 运行这段代码后 var text var word bool exist text Contains word int index text IndexO
  • Composer 2,您的某些插件似乎与它不兼容

    我尝试从 magento 市场安装扩展 但出现不兼容错误 问题1 magento composer root update plugin 已锁定到版本 1 0 0 并且未请求更新此包 magento composer root update
  • 如何自定义要在“添加更多 portlet”菜单中显示的 portlet

    我需要自定义哪个 portlet 出现在 添加更多 portlet 菜单 中 如下图所示 我需要根据登录的用户或站点 社区 限制此菜单中显示的 portlet 数量 这样 站点所有者或站点管理员将能够仅将全能管理员为他们决定的那些 port
  • 计算并显示页面加载进度百分比

    我有一个加载器 它在页面开始加载时加载 我需要显示其中的完成百分比 我的应用程序包含大量 jquery 和 css 并且还包含 ajax 调用 到目前为止 我已经在页面加载开始时显示进度条 并在 ajax 成功完成时隐藏它 另外 我已经显示
  • 在 Linux 中使用 C 语言使用原始套接字进行数据包嗅探

    我需要在 Linux 中编写一个数据包嗅探器来检测发送的 HTTPS 数据包并保存请求中的 url 我在中找到了这方面的代码安全狂并运行它 该代码运行并且仅嗅探接收到的数据包 但我需要在嗅探器中获取发送的数据包 如何获取这段代码中发送的数据
  • mvn 包因所需工件丢失而失败,即使它存在于我的远程存储库中

    我正在尝试奔跑mvn清理包在我的 Maven 项目上 它失败并显示以下消息 工件 net ezswitch ResourcesComponent jar 0 0 14 的 所需工件缺失 我已经配置了我的设置 xml包括我的远程存储库 如果我
  • 从纯 Lua 创建新的空用户数据

    我想我在 Lua 中的某个地方看到了一个可以返回新用户数据的本机函数 它存在吗 是否可以从普通 Lua 脚本创建自定义用户数据 你可能在想newproxy From http lua users org wiki HiddenFeature
  • Windows 任务管理器中的“VM 大小”是什么意思? [关闭]

    Closed 这个问题是无关 目前不接受答案 从计算机大小的角度来看 虚拟内存是 制作程序的一种方法 想想吧 有大范围的连续 地址 但实际上它的部分 目前使用的都是分散的 RAM 周围 不活动的部分是 保存在磁盘文件中 维基百科 我将 Wi
  • Matlab 中的范围界定如何工作?

    我刚刚发现 令我惊讶的是 调用以下函数 function foo if false fprintf 1 else do nothing end fprintf test 给出和错误Undefined function or variable
  • Tkinter、透明背景、Linux

    有没有办法在 Linux 上的 Tkinter 窗口中获得透明背景 我目前看到的唯一方法是 import tkinter as tk root tk Tk root overrideredirect True root wait visib
  • socket.error: [Errno 13] 创建假电子邮件服务器时权限被拒绝

    我正在尝试创建一个假电子邮件服务器作为 Flask 应用程序的一部分 以使用以下脚本在控制台上打印错误 但是 它会引发错误 我怎样才能解决这个问题 dpadmins MacBook microblog presentation python
  • GooglePlaces API“我们无法理解的响应”错误

    将标准自动完成代码与搜索栏一起使用 placesClient autocompleteQuery searchBar textField text bounds nil filter filter callback results erro
  • 是否可以在 字段中放置链接?

    是否可以在此处放置登录和注册链接
  • 如何确定最佳线程堆栈大小?

    实际上 有两种大小 初始承诺和总保留 您使用静态分析还是动态分析 哪些工具 哪些技术 一种技术是在 main 或线程 main 中使用已知值绘制堆栈 然后在清理时从堆栈限制进行扫描 直到不再找到已知值 您的堆栈末端将被定义为符号 生成一个
  • 从 IDE 禁用 C++ PDB 生成

    我们需要抑制调试符号的生成 项目属性 配置属性 c c 常规 调试信息格式下可用的选项相当于 Z7 Zi 和 ZI 我找不到完全省略 Zx 标志的方法 Unlike 这里的情况 我们正在从 IDE 进行构建 我使用的是Visual Stud
  • 生成 JavaScript 数组的排列[重复]

    这个问题在这里已经有答案了 我在 javascript 中有一个由 n 个不同元素组成的数组 我知道有 n 个 对这些元素进行排序的可能方法 我想知道生成该数组的所有可能顺序的最有效 最快 算法是什么 我有这个代码 var swap fun
  • python 3.9.5 中的相对导入

    我的文件夹结构如下 fff init py fg init py settings init py settings py obng test py 我想将 fg settings 中的 settings py 作为模块导入到 test p
  • ThreeJS 停止渲染

    我正在使用 ThreeJS 处理具有 OrbitControls 的基本 3d 场景 一切都很好 除了它导致我的整个网站滞后 因为即使用户没有看它 它也会自行循环 我想要一个函数 当满足某些条件时 在这种情况下 用户没有查看画布 我可以调用
  • 在 Java 中通过正则表达式查找最后一个索引

    我有一根绳子 O O O 我想找到最后一个 来分割字符串 第一次尝试是 POL 但这让它包含了 O 这是显而易见的 有人给点建议吗 我同意使用标准 String lastIndexOf 方法是最好的做法 但我最近使用了 Regex 部分 即