【问题标题】:How to extract a subString from android java String?如何从android java String中提取子字符串?
【发布时间】:2019-05-29 19:14:53
【问题描述】:

我试图从 java 字符串中提取子字符串,但失败了。我试过这样

String text = "audios/{any_number} any_audio_name.mp3";
text= text.substring(text.indexOf('/'), text.indexOf('3')-2);

更新

我需要 String 仅包含 any_audio_name 并删除 audios/ ,任何数字,例如{123}.mp3

例如 audios/{211} new school poem.mp3new school poem

【问题讨论】:

  • 失败是什么意思?你收到错误了吗?
  • 如果您不想包含/,请使用text.indexOf('/')+1。并且使用lastIndexOf('.') 比依靠减 2 更好。
  • 如果您正在使用文件名,Apache Commons 有 FileNameUtils 可以为您完成艰苦的工作并且可以更好地扩展。
  • 正则表达式是多余的......无论如何,重复stackoverflow.com/questions/924394/…

标签: java android string substring


【解决方案1】:

这个答案可能会有所帮助

String text = "audios/any_audio_name.mp3";
text= text.substring(text.indexOf('/')+1, text.indexOf('.'));

【讨论】:

  • 这也行,但前一个先给我答案
  • 您可能希望对它们都使用lastIndexOf。不管改变与否,你也应该交叉手指,希望永远不要看到像foo.bar/file_without_extension这样的输入
  • 是的,你是对的,但在这里他的要求是获取 mp3 文件的名称。所以很可能该文件带有 .mp3 扩展名,他将文件路径描述为音频
  • 其实我在listview中读取的XML数据在服务器中,首先我过滤(整行进入名称)然后在listview中显示它。
【解决方案2】:

在这里使用正则表达式似乎很合适。

public class MyMain{
    public static void main(String args[]) {
        String line = "audios/any_audio_name.mp3";
        String pattern = "audios\\/(.*)\\.mp3";

        // Create a Pattern object
        Pattern r = Pattern.compile(pattern);

        // Now create matcher object.
        Matcher m = r.matcher(line);

        if (m.find()) {
            System.out.println("Found value: " + m.group(1));
        } else {
            System.out.println("NO MATCH");
        }
    }
}

【讨论】:

  • "^.*/(.*)\\..*$" 适合更多情况。你不能使用\/,它要么是\\/,要么是/。并使用group(1)
  • 字符串模式 = "audios\/(.*).mp3";给出“字符串文字中的非法转义字符”错误
  • I/System.out:不匹配
  • 使用替换更简单,例如text = text.replaceFirst("^(?:.*?/)?([^/]+?)(?:\\.[^./]*?)?$", "$1"); --- 见 demo 上 regex101
  • @Attaullah 1) 学习正则表达式。 2) 更新替换调用中的模式。
【解决方案3】:

对于您编辑的问题。以下代码段将对您有所帮助,但在这里我假设“any_audio_name”中没有数字

String text = "audios/{any_number}any_audio_name.mp3";
text= text.substring(text.indexOf('/')+1, text.indexOf('.')).replaceAll("[\\d.]", "");;

【讨论】:

  • 但 {} 剩余
  • .replaceAll("\\{|\\}|[\\d.]","");是用这个
【解决方案4】:

感谢大家为我解决这个问题提供了想法。

 String text = "audios/{any_number}any_audio_name.mp3";
 text= text.substring(text.indexOf('/')+1, text.indexOf('.')).replaceAll("\\{|\\}|[\\d.]","");
 System.out.println(text);

【讨论】:

    猜你喜欢
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多