[英]Converting series of numbers from a string, into different numbers
我几乎需要发生的事情是我需要带弦
例
String ln = "It's so pretty! �";
这个想法是,我们要使用这个字符串,转换行的结尾。
�
进入
🀽
我可以很容易地进行转换,但是问题可能是要更改多个数字。 字符串可能是...
String ln = "It's so pretty! �� But � �";
我需要转换该行中的每个数字。
这样做的目的是这些代码中的每一个,都是一个字符的unicode,但是它是简写形式,对于我需要的目的而言是不正确的。
当我尝试创建一种转换数字的方法时,我几乎将字符串拆分为“&#”,并且在每种情况下都可以使用,除非它们不是串联连接的。 例如,
String ln = "Gahh it's so pretty. ������";
它将解决该字符串,并转换所有数字,并可以使用修改后的数字重新创建原始字符串。 但是它不会重新创建一个字符串,在数字代码之间留有间隔。
这就是我使用的代码。就像我说的那样,它只能按一种情况进行转换,而我还没有弄清楚如何使它适用于所有情况。
public static void main(String args[]) {
String ln = "Gahh it's so pretty. ������";
//71680 + code present
//Gahh it's so pretty. ������
String tmp = ln;
String[] codes = tmp.split("&#");
System.out.println(ln);
ArrayList<Integer> ids = new ArrayList<>();
for (int i = 0; i < codes.length; i++) {
codes[i] = codes[i].trim();
if (codes[i].length() != 6)
continue;
if (codes[i].endsWith(";")) {
codes[i] = codes[i].substring(0, codes[i].length()-1);
}
try {
ids.add(Integer.parseInt(codes[i]) + 71680);
} catch (NumberFormatException e) {
System.err.println("Error in conversion: " + codes[i]);
}
}
//System.out.println(Arrays.toString(codes));
codes = tmp.split("&#\\d{5}");
//System.out.println(Arrays.toString(codes));
for (int i = 0; i < codes.length; i++) {
//System.out.println(codes[i]);
if (codes[i].equals(";")) {
codes[i] = "&#"+ids.remove(0)+";";
}
}
for (String s : codes)
System.out.print(s);
System.out.println();
}
我只需要一些输入。 如果您愿意纠正一些问题,我很乐意接受帮助,但是老实说,我对您如何解决此问题更感兴趣。
您可以使用前向/后向正则表达式: "(?<=&#)(\\\\d+)(?=;)"
进行匹配和替换。
String ln = "Gahh it's so pretty. ������";
Pattern patt = Pattern.compile("(?<=&#)(\\d+)(?=;)");
Matcher mat = patt.matcher(ln);
StringBuffer buf = new StringBuffer();
while(mat.find()) {
mat.appendReplacement(buf, Integer.toString(Integer.parseInt(mat.group(1)) + 71680));
}
mat.appendTail(buf);
System.out.println(buf.toString());
使用Regex
,使用Matcher
和Pattern
可以这样构造一个模式:
"&#(\\d{5});\\s?"
这将与您的代码匹配,该代码可以或可以不带空格。 代码编号被捕获到组1中,您可以对其进行修改。 然后将每个代码替换为新代码,如下所示:
public static void main(String[] args) throws Exception {
List<String> lines = new ArrayList() {{
add("It's so pretty! �");
add("Gahh it's so pretty. ������");
add("It's so pretty! �� But � �");
}};
for (String ln : lines) {
Matcher matcher = Pattern.compile("&#(\\d{5});\\s?").matcher(ln);
while (matcher.find()) {
int number = Integer.parseInt(matcher.group(1)) + 71680;
ln = ln.replace(matcher.group(0), "&#" + number + "; ");
}
System.out.println(ln);
}
}
结果:
It's so pretty! 🀽
Gahh it's so pretty. 🀽 😍 🀽 😍 🀽 😪
It's so pretty! 🀽 🐥 But 🂬 🀽
如您所见,在每个代码之后都添加了空格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.