当前位置: 首页 > 知识库问答 >
问题:

如何在java中删除字符串中的每12个字符

连德水
2023-03-14

假设我有一个这样的字符串:

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"));

但它不起作用。有帮助吗?

共有3个答案

咸利
2023-03-14

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()
;

这是未经测试的代码,但应该接近您所需要的。

我在这里的代码是基于我在这个类似问题上看到的。

齐运诚
2023-03-14

要使用正则表达式删除每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);
殳自怡
2023-03-14

有时,您只需要一个简单的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删除字符串中所有类型的方括号字符(例如:[],(),{})。 我尝试使用此代码: 但这不起作用,请帮助我。 问题答案: 要删除 _ 所有标点符号_ ,包括所有方括号,大括号和方括号…,按问题是: