Java-字符串中第二次出现char

时间:2019-01-11 06:57:38

标签: java string

假设我有字符串

String path = "the/quick/brown/fox/jumped/over/the/lazy/dog/";

我想要以下输出

String output = "the/quick/brown/fox/jumped/over/the/lazy/";

我本以为下面的事情会做

output = path.substring(0, path.lastIndexOf("/", 1));

考虑到医生怎么说

  

返回指定字符的第一个(最后)出现的索引,从指定的索引向前(向后)搜索。

但这似乎不起作用。

任何帮助将不胜感激。

9 个答案:

答案 0 :(得分:3)

首先,lastIndexOf将返回索引,而不是字符串。它还从指定的索引1向后搜索向后,因此它只会查看之前的所有内容,并包括索引1处的字符。这意味着它仅检查th。预期它什么也找不到,并返回-1。

如果要搜索整个字符串,则应该省略第二个参数。

此外,要获得所需的输出字符串(假设您要删除最后一个路径组件?),可以将replaceAll与正则表达式一起使用:

String output = path.replaceAll("[^/]+/$", "");

答案 1 :(得分:2)

path长度> 2的情况下,此方法有效

final String path = "the/quick/brown/fox/jumped/over/the/lazy/dog/";
final int secondLast = path.length()-2;
final String output = path.substring(0, path.lastIndexOf("/",secondLast)+1);
System.out.println(output);

答案 2 :(得分:1)

lastIndexOf方法的第二个参数指定该方法应搜索字符串的最大索引。这意味着,就您而言

path.lastIndexOf("/", 1)

返回索引小于1的“ /”的第一个索引。

答案 3 :(得分:1)

使用Apache Commons IO

String output = org.apache.commons.io.FilenameUtils.getPath(path);

不使用Apache

public static String removeLastPart(String str) {
    int pos = str.length() - 1;

    while (str.charAt(pos) != '/' || pos + 1 == str.length()) {
        pos--;
    }

    return str.substring(0, pos + 1);
}

答案 4 :(得分:1)

似乎每个答案都假设您已经知道输入字符串以及其中最后一次出现:success="!!enquiryForm.preferences && !$v.enquiryForm.preferences.$invalid" :success-messages="(!!enquiryForm.preferences && !$v.enquiryForm.preferences.$invalid) ? 'Ok' : ''" 的确切位置,而通常情况并非如此...
这是更通用的方法,用于获取字符串中字符的倒数第二个(倒数第二个,倒数第三个等)

"/"

用法:

static int nthLastIndexOf(int nth, String ch, String string) {
    if (nth <= 0) return string.length();
    return nthLastIndexOf(--nth, ch, string.substring(0, string.lastIndexOf(ch)));
}

输出:

  

快速/棕色/狐狸/跳跃/翻越/懒惰/
  /快速/棕色/狐狸/跳/过去/的/
  /快速/棕色/
  / quick / brown / fox / jumped / over / the / lazy

答案 5 :(得分:1)

如果要处理路径和文件,为什么不使用内置类?在我看来,以下内容比字符串操作更容易:

Path path = Paths.get("the/quick/brown/fox/jumped/over/the/lazy/dog/");
System.out.println(path.getParent());
// prints: the\quick\brown\fox\jumped\over\the\lazy
System.out.println(path.getParent().getParent());
// prints: the\quick\brown\fox\jumped\over\the

答案 6 :(得分:1)

例如, 字符串键=“ aaa / bbb / ccc / ddd”;

,我需要我的结果字符串为“ ccc / ddd”。这是“ /”倒数第二个索引的子字符串,以下代码有助于::

$('#productList tbody').on( 'click', 'button', function () {
        // var data = table.row( $(this).parents('tr') ).data();
        alert( "Product is added!" );
    } );

密钥的最终值为“ ccc / ddd”。

答案 7 :(得分:0)

这是一个用例:

        String url = "http://localhost:4000/app/getPTVars";
        int secondLastIndexOf = url.substring(0, url.lastIndexOf('/')).lastIndexOf('/');
        System.out.println(secondLastIndexOf);
        System.out.println(url.substring(secondLastIndexOf, url.length()));

和输出:

21
/app/getPTVars

答案 8 :(得分:0)

尝试 - 1 方法:

int j = path.lastIndexOf("/");
int i = path.lastIndexOf("/", j - 1);      // the 2nd last index from the last index

String output = path.substring(0, i + 1);  // inclusive