使用java从另一个字符串中获取特定字符串

时间:2013-10-03 08:42:26

标签: java

  • 我有一个低于值的字符串。我需要从中获取函数名称。并且函数名称是动态的。
  • 使用下面的代码,我可以得到“功能”这个词发生了多少次。不知道如何获取函数名称。

       String strLine=request.getParameter("part1");
       if(strLine!=null){
          String findStr = "function ";
            int lastIndex = 0;
            int count =0;
            while(lastIndex != -1){
                   lastIndex = strLine.indexOf(findStr,lastIndex);
                   if( lastIndex != -1){
                         count ++;
                         lastIndex+=findStr.length();
                  }
            }
            System.out.println("count "+count);
       }
    
  • part1是来自用户的值。可以是,

           function hello(){
           }
           function here(){
           }
    
  • 在上面的内容中,没有更改功能和功能名称。

  • 我想得到,hello()和here()作为输出。

3 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你试着解析字符串part1,你想获得函数名称。它们是动态的,因此您无法对名称做任何假设。在这种情况下,您必须编写自己的解析器或使用正则表达式。

以下程序使用正则表达式提取函数名称:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Stackoverflow {
    private static Pattern pattern = Pattern.compile("\\s([a-zA-Z0-9_]+\\(\\))",     Pattern.DOTALL | Pattern.MULTILINE);

    public static void main(String[] args) {
        String part1 = "function hello(){\n" +
                "       }\n" +
                "       function here(){\n" +
                "       }";
        Matcher matcher = pattern.matcher(part1);
        while (matcher.find()) {
            String str = matcher.group();
            System.out.println(str);
        }
    }
}

输出结果为:

hello()
here()

我希望这能回答你的问题。

答案 1 :(得分:0)

@Bobby rachel。对不起,我不明白你的问题。 但是,如果您要检索名称,则可以使用XML格式。然后从中检索。

例如  String userid = request.getParameter(“part1”);

  String stri = "req=<header><requesttype>LOGIN</requesttype></header>"
            + "<loginId>"
            + userid                  //the string you get and want to retrieve                         
            + "</loginId>"                   //from this whole string

object.searchIn(String loginId)//输入要检索的par的名称

检索用户标识值的另一个功能

public String serachIn(String searchNode){         试试{

        int firstpos = stri.indexOf("<" + searchNode + ">");
        int endpos = stri.indexOf("</" + searchNode + ">");
        String nodeValue = stri.substring(firstpos + searchNode.length() + 2, endpos);
        System.out.println("node value"+searchNode+nodeValue);

        return nodeValue;

    }

我希望它有所帮助

答案 2 :(得分:0)

您可以使用regex实现此目的,这是一个示例:

public static List<String> extractFunctionsNames(String input) {
    List<String> output = new ArrayList<String>();
    Pattern pattern = Pattern.compile("(function\\s+([^\\(\\)]+\\([^\\)]*\\)))+");
    Matcher matcher = pattern.matcher(input);
    while (matcher.find()) {
        output.add(matcher.group(2));
    }
    return output;
}

public static void main(String[] args) {
    String input = "function hello(){\n"
                     + "    \n}"
                     + "\nfunction here(){\n"
                     + "}\n";
    System.out.println(extractFunctionsNames(input));
}

<强>输出:

[hello(), here()]

请注意,此代码不可靠,因为function hello() {print("another function test()")}之类的输入会输出[hello(), test()]