Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何设置stringtokenizer';s分隔符将文本拆分为具有给定长度的单位_Java_Arrays_String_Stringtokenizer - Fatal编程技术网

Java 如何设置stringtokenizer';s分隔符将文本拆分为具有给定长度的单位

Java 如何设置stringtokenizer';s分隔符将文本拆分为具有给定长度的单位,java,arrays,string,stringtokenizer,Java,Arrays,String,Stringtokenizer,我有这个序列,我想把它分成3个字符长度的单位,比如ggt acc tcc等?试试下面的方法: String str[] = s.split("(?<=\\G...)"); Output [ggt, acc, tcc, tac, ggg, agg, cag, cag, tga, gga, att, ttc, cgc, aat, ggg, cga, aag, cct, gac, gga] String str[]=s.split((?不要使用Stringtokenizer)。要拆分的正则表达

我有这个序列,我想把它分成3个字符长度的单位,比如ggt acc tcc等?

试试下面的方法:

String str[] = s.split("(?<=\\G...)");
Output
[ggt, acc, tcc, tac, ggg, agg, cag, cag, tga, gga, att, ttc, cgc, aat, ggg, cga, aag, cct, gac, gga]

String str[]=s.split((?不要使用Stringtokenizer)。要拆分的正则表达式效率非常低-DNA/RNA字符串非常长

在Java 8中,可以执行以下解决方案:

public static void main(String[] args) {
    String str = "ggtacctcctacgggaggcagcagtgaggaattttccgcaatgggcgaaagcctgacgga";
    List<String> collect = str.chars()
        .mapToObj(accumulator(3))
        .filter(s -> s != null)
        .collect(Collectors.toList());
    System.out.println(collect);
}

private static IntFunction<String> accumulator(final int size) {
    return new CharAccumulator(size);
}

private static final class CharAccumulator implements IntFunction<String> {
    private StringBuilder builder ;
    private int size;

    private CharAccumulator(int size) {
        this.builder = new StringBuilder();
        this.size = size;
    }

    @Override
    public String apply(int value) {
        builder.append((char) value);
        if (builder.length() == size) {
            String result = builder.toString();
            builder.setLength(0);
            return result;
        } else  {
            return null;
        }
    }
}
publicstaticvoidmain(字符串[]args){
String str=“ggtacctctctaccgggagggcagagtgagggaatttcgcaatgggcgaagctgacggga”;
List collect=str.chars()
.mapToObj(累加器(3))
.filter(s->s!=null)
.collect(Collectors.toList());
系统输出打印项次(收集);
}
专用静态整数函数累加器(最终整数大小){
返回新字符累加器(大小);
}
私有静态最终类Characumulator实现IntFunction{
私人建筑商;
私有整数大小;
专用字符累加器(整数大小){
this.builder=新的StringBuilder();
这个。大小=大小;
}
@凌驾
公共字符串应用(int值){
builder.append((char)值);
if(builder.length()=大小){
字符串结果=builder.toString();
builder.setLength(0);
返回结果;
}否则{
返回null;
}
}
}

它不那么容易理解,也可能没有那么好用,但它也适用于惰性字符流(节省内存)。

您可以尝试以下方法,将字符串转换为字符[],并以3为单位循环,以获得该字符串:

String str = "ggtacctcctacgggaggcagcagtgaggaattttccgcaatgggcgaaagcctgacgga";
    char[] array = str.toCharArray();
    List<String> result = new ArrayList<String>();
    for(int i = 0; i<array.length; i+=3)
    {
        StringBuilder s = new StringBuilder();
        for(int j = i ; j<array.length && j < i+3; j++)
        {
            s.append(array[j]);
        }
        result.add(s.toString());
    }
String str=“ggtacctctctaccgggagggcagggaattccgcaatgggaaagccctgacggga”;
char[]数组=str.toCharArray();
列表结果=新建ArrayList();

对于(int i=0;i这里是另一个使用
substring
方法的解决方案(没有
StringTokenizer
):

publicstaticvoidmain(字符串[]args){
字符串s=“ggtacctctctaccgggagggcagtagtgagggaatttcgcaatgggcgaagctgacggga”;
char[][]c=新字符[s.length()/3][3];
对于(int i=0;i
不能。tokinizer需要一个分隔符。为什么不以3个字符的增量遍历字符串呢?SMA表明了这一点。但是它的性能非常差。
public static void main(String[] args) {        
    String s = "ggtacctcctacgggaggcagcagtgaggaattttccgcaatgggcgaaagcctgacgga";
    char[][] c = new char[s.length()/3][3];
    for ( int i = 0 ; i < s.length() ; i+=3 ) {
        String substring = s.substring(i, i+3);
        c[i/3] = substring.toCharArray();
    }
    // test
    for ( int i = 0 ; i < c.length ; i++ ) {
        for ( int j = 0 ; j < c[0].length ; j++ ) {
            System.out.print(c[i][j]);
        }
        System.out.println();
    }
}