首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java宏解析器

java宏解析器
EN

Stack Overflow用户
提问于 2010-07-20 04:52:24
回答 1查看 213关注 0票数 0

你好,我是一个爪哇新手。

我正在尝试写一个宏解析器,我有一个字符串,它被表示为

代码语言:javascript
运行
复制
String s = '{object.attribute}'  --> result of the resolver should be 'attribute'

String prefix = '{object.'
String suffix = '}'

这很简单。

我还想扩展到使用相同的解析器来解决以下问题

代码语言:javascript
运行
复制
String s = 'attrName1=$attrValue1$;&attrName2=$attrValue2$;'  --> result of the resolver should be attrName1=attrValue1;&attrName2=attrValue2;

String prefix = '$'
String suffix = '$'

我可以将泛化的前缀和后缀传递给该方法,但不确定逻辑应该是什么。

代码语言:javascript
运行
复制
public class StringMacro {

/**
 * @param args
 */
public static void main(String args[]) {
    String s = "{article.article_type}";
    String prefix = "{article.";
    String suffix = "}";
    int prefixLength = prefix.length();
    int suffixLength = suffix.length();
    int startIndex = s.indexOf("{article.");
    int prevEndIndex =startIndex+s.indexOf(suffix);

    StringBuffer output = new StringBuffer();

    while (startIndex != -1 ) {
        output.append(s.substring(startIndex+prefixLength,prevEndIndex));
        int endIndex = s.indexOf(suffix,startIndex);
        if ( endIndex == -1 ) {
            output.append(s.substring(startIndex));
            break;
        }
        String macro = s.substring(startIndex+prefixLength,endIndex-1);

        prevEndIndex = endIndex+suffixLength;
        startIndex = s.indexOf(prefix, prevEndIndex);


    }

    System.out.println(">>>"+output);
}

}

请帮帮我!

EN

回答 1

Stack Overflow用户

发布于 2010-07-20 22:44:39

这可能会起作用。

代码语言:javascript
运行
复制
public static void main(String args[]) {
    String s = "attr1=$attr1Value$&attr2=$attr2Value$Test"String;
    String prefix = "$";
    String suffix = "$";

    String s1 = "{obj.attr}";
    String prefix1 = "{obj";
    String suffix1 = "}";

    int prefixIndex = 0;
    int startIndex = 0;
    int endIndex = 0;
    Map map = new HashMap();
    map.put("attr1Value", "100W");
    map.put("attr2Value", "123W");
    map.put("attr", "columnist");


    StringBuffer buffer = new StringBuffer();
    while(prefixIndex != -1){
        prefixIndex = s.indexOf(prefix, prefixIndex);
        endIndex = s.indexOf(suffix, prefixIndex+prefix.length());

        buffer.append(s.substring(startIndex, prefixIndex));

        if(endIndex == -1){
            break;
        }
        System.out.println(s.substring(prefixIndex+prefix.length(), endIndex));
        buffer.append(map.get(s.substring(prefixIndex+prefix.length(), endIndex)));

        prefixIndex = s.indexOf(prefix, endIndex+suffix.length());

        startIndex= endIndex+suffix.length();
    }

    if(prefixIndex == -1){
        buffer.append(s.substring(endIndex+suffix.length()));
    }

    System.out.println(buffer);






}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3284989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档