假设我有一个这样的字符串:
String str = "~asdfl;kjx,~rgadfaeg,dsafnewgfljka;ldfjsfa;dlkjfa;lvjvbnaber;fwelfjadfafa"
int character = 12
我想做的是删除字符串中的每12个字符,所以我会删除12个索引,然后是第24个,然后是第36个,等等,直到字符串结束。
我删除的索引(每12个或每2个)必须等于我拥有的字符变量,因为该变量会发生变化。
我尝试这样做与正则表达式:
System.out.println(s.replaceAll(".(.)", "$12"));
但它不起作用。有帮助吗?
Java中的char
类型是遗留的,基本上已经损坏。作为16位值,char
不能表示大多数字符。
相反,使用代码点整数。
为每个字符的代码点创建一个数组。
int[] codePointsArray = input.codePoints().toArray() ;
列出该数组。
List< Integer > codePoints = List.of( codePointsArray ) ;
或者:
List< Integer > codePoints = input.codePoints().boxed().toList() ;
为访问该列表的每个元素所需的索引创建一个IntStream
。使用每个索引提取一个代码点,并按第n个元素进行筛选。收集到一个StringBuilder
。
String result =
IntStream
.range( 0 , codePoints.size() )
.filter( n -> n % 12 != 0 )
.mapToObj( codePoints :: get )
.collect( StringBuilder :: new , StringBuilder :: appendCodePoint , StringBuilder :: append )
.toString()
;
这是未经测试的代码,但应该接近您所需要的。
我在这里的代码是基于我在这个类似问题上看到的。
要使用正则表达式删除每12个字符,请使用以下模式:
(.{11}).
然后仅替换为捕获的$1
。
示例Java代码:
String str = "~asdfl;kjx,~rgadfaeg,dsafnewgfljka;ldfjsfa;dlkjfa;lvjvbnaber;fwelfjadfafa";
String output = str.replaceAll("(.{11}).", "$1");
System.out.println(output);
这张照片是:
~asdfl; kjx, rgadfaeg, dsfnewgfljka; dfjsfa; dlkja; lvjvbnabe; fWelfjadfaa
编辑:
要替换某些固定宽度的正则表达式,请使用:
String str = "~asdfl;kjx,~rgadfaeg,dsafnewgfljka;ldfjsfa;dlkjfa;lvjvbnaber;fwelfjadfafa";
int width = 11;
String output = str.replaceAll("(.{" + width + "}).", "$1");
System.out.println(output);
有时,您只需要一个简单的for
循环:
public class Test {
public static void main(String[] args) {
String str = "~asdfl;kjx,~rgadfaeg,dsafnewgfljka;ldfjsfa;dlkjfa;lvjvbnaber;fwelfjadfafa";
int character = 12;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
if ((i + 1) % character != 0) {
sb.append(str.charAt(i));
}
}
String result = sb.toString();
System.out.println(result);
}
}
如果您坚持使用正则表达式,您可以将字符
变量插入表达式,如下所示:
public class Test {
public static void main(String[] args) {
String str = "~asdfl;kjx,~rgadfaeg,dsafnewgfljka;ldfjsfa;dlkjfa;lvjvbnaber;fwelfjadfafa";
int character = 12;
System.out.println(str.replaceAll("(.{" + (character - 1) + "}).", "$1"));
}
}
问题内容: 为了访问Java中String的各个字符,我们有。是否有任何内置函数来删除Java中String的单个字符? 像这样: 问题答案: 你也可以使用可变的类。 它具有方法deleteCharAt(),以及许多其他mutator方法。 只需删除需要删除的字符,然后得到结果,如下所示: 这样可以避免创建不必要的字符串对象。
使用扫描仪,我想读取char的索引,然后将其从字符串中删除。只有一个问题:如果char在字符串中出现多次,那么。替换()将删除所有这些字符。 例如,我想从字符串“纹理文本”中获取第一个“t”的索引,然后只删除那个“t”。然后我想得到第二个't'的索引,然后删除它。
为了在Java中访问字符串的各个字符,我们有。java中是否有任何内置函数来删除字符串的单个字符? 像这样的东西:
问题内容: 可以说我有这个单词列表: 比我有文字 是否有匹配stopWords并在忽略大小写时将其删除的方法;像这样的地方?: 结果: 如果您了解正则表达式,效果很好,但我真的更喜欢像Commons解决方案这样的东西,它更注重性能。 顺便说一句,现在我正在使用此通用方法,该方法缺少适当的不区分大小写的处理: 问题答案: 这是不使用正则表达式的解决方案。我认为它不如我的其他答案,因为它更长且不清楚,
我需要对一个字符串进行预处理,并从中移除一些单词。我要找的东西是这样的:- 我是新的编程,所以请考虑。
问题内容: 我想使用Java删除字符串中所有类型的方括号字符(例如:[],(),{})。 我尝试使用此代码: 但这不起作用,请帮助我。 问题答案: 要删除 _ 所有标点符号_ ,包括所有方括号,大括号和方括号…,按问题是: