我想从特定索引开始搜索字符串的子字符串.

假设我有字符串:"PO DAD PO PE DA X PO ZA RA"

我想开始的索引是字符X,13也是.如果我想正常搜索"ZA",我会做如下操作:

接下来,我想搜索第一个子串'PO',但从"X"索引向后搜索.所以,我会得到4(因为从左边看它接近X),而不是15.

我该怎么做?

推荐答案

public static void main(String[] args) {
    String s = "PO DAD PO PE DA X PO ZA RA";
    System.out.println(usingSubstring(s));

    
    long start = System.currentTimeMillis();
    for (int i = 0; i < 10000; i++) {
        usingSubstring(s);
    }
    long end = System.currentTimeMillis();
    System.out.println("`usingSubstring()` took " + (end - start) + "ms.");
}


/**
 * 1. Get the first index of `X`.
 * 2. Substring from 0 ... (1).
 * 3. Get the last index from (2) for `PO`.
 *
 * @param s input string
 * @return last index of `PO` backwards from `X`
 */
private static int usingSubstring(String s) {
    String toSearch = "PO";
    String searchUntil = "X";
    return s.substring(0, s.indexOf(searchUntil)).lastIndexOf(toSearch);
}

输出:

7
`usingSubstring()` took 2ms.

代码注释中解释:)

Java相关问答推荐

当切换javaFX场景时,stage的大小正在Minimize

Java记录的不同序列化/反序列化

';com.itextpdf.ext.html.WebColors已弃用

在Java中,在单个逻辑行中连接列表和单个元素的正确方法是什么?

Java编译器抛出可能未正确初始化的错误?

计算两个浮点数之间的距离是否对称?

在Spring终结点中,是否可以同时以大写和小写形式指定枚举常量?

使用Spring和ActiveMQ的侦听器方法引发属性名称不能重复为空警告

JOOQ中的子查询使用的是默认方言,而不是配置的方言

Java-动态绑定-问题-了解

从ActiveMQ Classic迁移到ActiveMQ Artemis需要进行哪些客户端更改?

如何集成语义发布和BitBucket(Java项目)

继续收到错误SQLJDBC EXCEPTION执行";org.springframework.dao.InvalidDataAccessResourceUsageException:&

如何在构建Gradle项目时排除com.google.guava依赖项的一个变体

从LineChart<;字符串、字符串和gt;中删除数据时出现特殊的ClassCastException;

使用迭代器遍历HashMap不会因IF条件而停止

处理4.3问题:javax.xml.ind包不存在(&Q;).您可能在学习GitHub教程时遗漏了库.&Q

Java 21保护模式的穷尽性

如何在Java上为循环数组从synchronized迁移到ReentrantLock

java中的网上购物车解析错误