随机变换位置java_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 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 s, String delimiter) {

if (s.isEmpty()) return "";

Iterator iter = s.iterator();

StringBuffer buffer = new StringBuffer(iter.next());

while (iter.hasNext()) buffer.append(delimiter).append(iter.next());

return buffer.toString();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值