Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析路径以获取所需名称_Java_Regex_String_Parsing - Fatal编程技术网

Java 解析路径以获取所需名称

Java 解析路径以获取所需名称,java,regex,string,parsing,Java,Regex,String,Parsing,我试图解析项目或项目包的给定路径,以便从中构造有用的名称 我一直在玩弄正则表达式,但我遇到了麻烦 我想要的示例(提供的字符串=>所需字符串): 到目前为止,我已经 path.toString().substring(path.toString().indexOf("bin")+4) .replace('/', '.').replace('\\', '.');` 它可以让所有东西都通过bin,但不知道如何做其他事情…您可以使用/([^/]*)/bin/?(*)?替

我试图解析项目或项目包的给定路径,以便从中构造有用的名称

我一直在玩弄正则表达式,但我遇到了麻烦

我想要的示例(
提供的字符串
=>
所需字符串
):

到目前为止,我已经

path.toString().substring(path.toString().indexOf("bin")+4)
               .replace('/', '.').replace('\\', '.');` 
它可以让所有东西都通过bin,但不知道如何做其他事情…

您可以使用
/([^/]*)/bin/?(*)
?替换为反向参考1和2,如下所示:


如果2不匹配,则需要去掉尾随。(或者测试2并加入ux)

我没有可用的Java编译器,但您可以尝试以下伪ish代码:

String[] delimiters = {"/", "\\"};
String[] tokens = path.Split(delimiters);

StringBuilder result = new StringBuilder();

for(int i = 0; i < tokens.Length; i++)
{
    if(tokens[i].toLower().equals("bin") && (i > 0))
    {
        result.append(tokens[i-1]);
        for(int j = i+1; j < tokens.Length; j++)
        {
            result.append("_" + tokens[j]);
        }
        break;
    }
}

String finalPath = result.toString();
String[]分隔符={”/“,“\\”};
String[]tokens=path.Split(分隔符);
StringBuilder结果=新建StringBuilder();
for(int i=0;i0))
{
追加(标记[i-1]);
for(int j=i+1;j
请将
令牌[i].toLower()==“bin”
更改为
令牌[i].toLower().equals(“bin”)
。我不喜欢将字符串与
=
进行比较,即使是在伪代码中。谢谢:)打得好!安全总比抱歉好。我对java一无所知,但在
/
正斜杠上拆分字符串并删除索引0、1、2和4或选择索引3和5不是同样容易吗
String[] delimiters = {"/", "\\"};
String[] tokens = path.Split(delimiters);

StringBuilder result = new StringBuilder();

for(int i = 0; i < tokens.Length; i++)
{
    if(tokens[i].toLower().equals("bin") && (i > 0))
    {
        result.append(tokens[i-1]);
        for(int j = i+1; j < tokens.Length; j++)
        {
            result.append("_" + tokens[j]);
        }
        break;
    }
}

String finalPath = result.toString();