我在使用索引替换字符串中的字符时遇到问题。
例如,我想更换每一个'?'索引字符串:
"a?ghmars?bh?"
- >将是"a1ghmars8bh11"
。
真的很感激任何帮助。 P.s我今天需要解决这个任务,所以我可以把它传给我的导师。 谢谢你。
到目前为止,我要管理用?
替换0
;通过这段代码:
public static void main(String[] args) {
String name = "?tsds?dsds?";
String myarray[] = name.split("");
for (int i = 0; i < myarray.length; i++) {
name = name.replace("?", String.valueOf(i++));
}
System.out.println(name);
输出:
0tsds0dsds0
它应该是:
0tsds5dsds10
答案 0 :(得分:1)
对于简单的替换操作,String.replaceAll
就足够了。对于更复杂的操作,您必须部分回溯,这种方法的作用。
documentation of String.replaceAll
表示它等同于
Pattern.compile(regex).matcher(str).replaceAll(repl)
而链接的documentation of replaceAll
包含对方法appendReplacement
的引用,该方法由Java的正则表达式包public
提供,完全用于支持自定义替换操作。 It’s documentation还提供了普通replaceAll
操作的代码示例:
Pattern p = Pattern.compile("cat"); Matcher m = p.matcher("one cat two cats in the yard"); StringBuffer sb = new StringBuffer(); while (m.find()) { m.appendReplacement(sb, "dog"); } m.appendTail(sb); System.out.println(sb.toString());
使用此模板,我们可以按如下方式实现所需的操作:
String name = "?tsds?dsds?";
Matcher m=Pattern.compile("?", Pattern.LITERAL).matcher(name);
StringBuffer sb=new StringBuffer();
while(m.find()) {
m.appendReplacement(sb, String.valueOf(m.start()));
}
m.appendTail(sb);
name=sb.toString();
System.out.println(name);
不同之处在于我们使用LITERAL
模式来抑制正则表达式中?
的特殊含义(比使用"\\?"
作为模式更容易阅读)。此外,我们指定找到的匹配位置的String
表示作为替换(这是您的问题的全部内容)。就是这样。
答案 1 :(得分:0)
在之前的回答错误的阅读问题,对不起。这段代码取代了每个“?”及其索引
String string = "a?ghmars?bh?das?";
while ( string.contains( "?" ) )
{
Integer index = string.indexOf( "?" );
string = string.replaceFirst( "\\?", index.toString() );
System.out.println( string );
}
所以来自“a?ghmars?bh?das?”我们得到了“a1ghmars8bh11das16”
答案 2 :(得分:0)
我认为这可能有用,我没有检查过。
public class Stack{
public static void main(String[] args) {
String name = "?tsds?dsds?";
int newvalue=50;
int countspecialcharacter=0;
for(int i=0;i<name.length();i++)
{
char a=name.charAt(i);
switch(a)
{
case'?':
countspecialcharacter++;
if(countspecialcharacter>1)
{
newvalue=newvalue+50;
System.out.print(newvalue);
}
else
{
System.out.print(i);
}
break;
default:
System.out.print(a);
break;
}
}
} }
答案 3 :(得分:0)
检查以下代码
String string = "a?ghmars?bh?das?";
for (int i = 0; i < string.length(); i++) {
Character r=string.charAt(i);
if(r.toString().equals("?"))
System.out.print(i);
else
System.out.print(r);
}
答案 4 :(得分:0)
您(或多或少)用事件的基数替换每个目标(1表示1,2表示2,等等),但您需要索引。
使用StringBuilder - 您只需要几行:
StringBuilder sb = new StringBuilder(name);
for (int i = name.length - 1; i <= 0; i--)
if (name.charAt(i) == '?')
sb.replace(i, i + 1, i + "");
注意倒计时,而不是向上,允许替换索引为多位数,如果你计算在内会改变后续调用的索引(例如,当索引“?”时,所有内容都会被一个字符改组。 “是10或更多。”