gpt4 book ai didi

java - 查找 "opposite"或结束字符

转载 作者:行者123 更新时间:2023-11-29 05:18:27 25 4
gpt4 key购买 nike

我有一个方法 strip(),这里是它的使用上下文:

public String strip(String data, String tag)
{
...
}
@param data a string where all open symbols such as [({ have a matching close somewhere after them.
@param tag an opening symbol(such as "["
@return a substring of the contents between the first given opening and the last corresponding closing character- with both characters removed.
example:

strip("caca blah blah [ hb {} ((stuff){okay} vv]","[")

should return "hb {}((stuff)(okay) vv"

我的问题 - 我有一个解决方案,但我正在尝试找到一种方法来找到给定字符的“相反”或结束字符,而无需手动编码所有可能的组合。是否存在某种字符编码技巧或模式,或者可能是某处的实用方法?

最佳答案

只需手动定义“相反”字符即可,数量不多。这可以通过 Map、成对序列、交错序列、switch 语句等来完成。所有这些都可以隐藏在一个漂亮整洁的方法后面。


虽然我推荐这个(真的,只是使用一个 map /开关)这个“有趣”的方法,加上一个守卫,会起作用:

char closingOf(char c) {
String opens = "(<[{";
if (opens.indexOf(c) > -1) {
// For "why" this works, see an ASCII character table. YMMV when
// including other Unicode symbols.
return c + (c < '<' ? 1 : 2);
} else {
return 0; // you get nothing
}
}

这也可以用成对的序列来完成:

String opens  = "(<[{";
String closes = ")>]}";
int i = opens.indexOf(c);
return i > -1 ? closes.charAt(i) : 0;

或者在交错序列中:

String pairs = "()<>[]{}";
int i = pairs.indexOf(c);
return i > -1 && (i % 2) == 1 ? pairs.charAt(i + 1) : 0;

或者使用部分扫描的序列:

String pairs = ")>]}(<[{";
int i = pairs.indexOf(c, 4);
return i > -1 ? pairs.charAt(i - 4) : 0;

或者如果感觉实用但乏味(对于这种情况,这种方法很好与 Map 竞争,我可能会使用它;与之前的一些方法不同,这种转换也很容易遵循“有趣”的例子):

switch (c) {
case '(': return ')';
case '<': return '>';
case '{': return '}';
case '[': return ']';
default: return 0;
}

关于java - 查找 "opposite"或结束字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25696772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com