gpt4 book ai didi

Java:用随机字符串替换字符串的最简单方法

转载 作者:行者123 更新时间:2023-11-30 12:01:45 24 4
gpt4 key购买 nike

字符串将由某些符号(例如 ax、bx、dx、c、acc)和数字组成。

例如:斧头 5 5dx 3 加速器c 轴 bx

我想用同一组中的另一个符号替换一个或所有符号(随机)。即,将 {ax,bx,dx,c,acc} 之一替换为 {ax,bx,dx,c,acc} 之一。

替换示例:累积 5 5dx 3 加速器c轴bx或者c 5 5dx 3 加速器斧头斧头

有没有办法用正则表达式做到这一点?在 java ?如果可以,我应该使用哪些方法?

最佳答案

我认为这是从包含符号超集的字符串中替换特定符号集的最干净的解决方案。appendreplacement 是这个方法的关键。一个重要的警告:不要在元素列表中包含任何未转义的美元字符 ($)。使用“\$”转义它们最终使用
.replaceall("\$","\\$");在将每个字符串添加到列表之前。另见 javadoc对 $ 符号有疑问。

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

public class ReplaceTokens {
public static void main(String[] args) {
List<String> elements = Arrays.asList("ax", "bx", "dx", "c", "acc");
final String patternStr = join(elements, "|"); //build string "ax|bx|dx|c|acc"
Pattern p = Pattern.compile(patternStr);
Matcher m = p.matcher("ax 5 5 dx 3 acc c ax bx");
StringBuffer sb = new StringBuffer();
Random rand = new Random();
while (m.find()){
String randomSymbol = elements.get(rand.nextInt(elements.size()));
m.appendReplacement(sb,randomSymbol);
}
m.appendTail(sb);
System.out.println(sb);
}

/**
* this method is only needed to generate the string ax|bx|dx|c|acc in a clean way....
* @see org.apache.commons.lang.StringUtils.join for a more common alternative...
*/
public static String join(List<String> s, String delimiter) {
if (s.isEmpty()) return "";
Iterator<String> iter = s.iterator();
StringBuffer buffer = new StringBuffer(iter.next());
while (iter.hasNext()) buffer.append(delimiter).append(iter.next());
return buffer.toString();
}

关于Java:用随机字符串替换字符串的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/237058/

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