使用下面的代码,我可以得到“功能”这个词发生了多少次。不知道如何获取函数名称。
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()作为输出。
答案 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()]