如何利用多核CPU並行任務快速搜索文本文件中指定列中是否存在某項內容

範例項目結構如下:

Document 類獲取測試數據

words.txt中文測試數據下載地址:

鏈接:https://pan.baidu.com/s/1Ydwo6IX_NYRsOEfw5PMQlQ
提取碼:4wjn
複製這段內容後打開百度網盤手機App,操作更方便哦

Document.java

package com.myth;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Document {

    private String wordsChinese[] = {
        "有", "些", "事", "把", "它", "埋", "藏", "在",
        "心", "裏", "也", "許", "會", "更", "好", "時", "間",
        "久", "了", "也", "就", "變", "成", "了", "故", "事",
        "悲", "傷", "的", "秋", "千", "總", "有", "微",
        "風", "陪", "伴", "孤", "寂", "的", "夜", "總", "有",
        "繁", "星", "點", "點", "驀", "然", "回", "首",
        "而", "你", "卻", "不", "在", "我", "的", "身", "邊",
        "獨", "步", "在", "深", "秋", "的", "陽", "光", "下",
        "看", "萬", "物", "如", "夢", "一", "般", "地", "逝",
        "去", "聽", "流", "水", "在", "風", "中", "悲", "涼",
        "我", "用", "那", "秋", "的", "氣", "息", "爲", "筆",
        "爲", "夢", "爲", "紙", "描", "繪", "那", "曾", "經",
        "有", "名", "字", "的", "回", "憶",
        "我", "們", "在", "各", "自", "的", "小", "路", "上", "匆",
        "匆", "地", "行", "走", "一", "直", "未", "曾", "停", "留",
        "不", "經", "意", "間", "在", "某", "個", "路", "口", "遇",
        "見", "於", "是", "輕", "輕", "地", "問", "候", "淡", "淡",
        "地", "寒", "暄", "之", "後", "揮", "手", "說", "再", "見"
    };

    private String wordsEnglish[] = {
        "Some", "things", "you", "hide", "it", "in", "your", "heart",
        "perhaps", "better", "so", "a", "long", "time", "becomes", "the", "story",
        "Sad", "swing", "total", "have", "breeze", "company", "lonely", "night",
        "always", "have", "stars", "suddenly", "look", "back", "and", "you're", "not", "there",
        "In", "late", "autumn", "sunlight", "see", "all", "things", "come", "to", "pass",
        "and", "listen", "to", "dream", "like", "flowing", "water", "in", "the", "mind",
        "with", "the", "breath", "of", "autumn", "sad", "for", "pen", "for", "your", "dreams",
        "for", "paper", "Describe", "that", "named", "ever", "memories",
        "We", "in", "their", "respective", "path", "in", "a", "hurry", "to", "work",
        "has", "not", "stay", "at", "a", "crossroads", "casual", "greeting", "meeting",
        "so", "gently", "light", "greet", "then", "waned", "and", "said", "goodbye",};

    public List<String[]> generateDocument(int rowIndexEnd, int columnCount, int columnIndex, String findWord) {
        int counter = 0;
        List<String[]> document = new ArrayList<>();
        Random random = new Random();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < rowIndexEnd; i++) {
            String[] arrColums = new String[columnCount];
            for (int j = 0; j < columnCount; j++) {
                int index = random.nextInt(wordsChinese.length);
                arrColums[j] = wordsChinese[index];
                if (j > 0) {
                    sb.append("\t");
                }
                sb.append(wordsChinese[index]);
                if (arrColums[columnIndex].equals(findWord)) {
                    counter++;
                }
            }
            document.add(arrColums);
            sb.append(System.lineSeparator());
        }
        System.out.println(sb.toString());
        System.out.println("Document: The word " + findWord + " appears " + counter + " times in the document");
        return document;
    }

    public List<String[]> getDocument(int columnCount, int columnIndex, String findWord) {
        String inputFile = "D:\\human\\words.txt";
        int counter = 0;
        List<String[]> document = new ArrayList<>();
        String line = null;
        BufferedReader bufferedReader = null;
        try {
            bufferedReader = new BufferedReader(new FileReader(inputFile));
            while ((line = bufferedReader.readLine()) != null) {
                String[] arrStr = line.split("\t");
                String[] arrColums = new String[columnCount];
                for (int i = 0; i < columnCount; i++) {
                    arrColums[i] = arrStr[i];
                }
                if (arrStr[columnIndex].equals(findWord)) {
                    counter++;
                }
                document.add(arrColums);
            }
            bufferedReader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("Document: The word " + findWord + " appears " + counter + " times in the initial document");
        return document;
    }

}

LineTask.java 文本行任務類

package com.myth;

import java.util.concurrent.RecursiveTask;

public class LineTask extends RecursiveTask<Integer> {

    private static final long serialVersionUID = 1L;
    private String[] line;
    private int columnIndex;
    private String findWord;

    public LineTask(String[] line, int columnIndex, String findWord) {
        this.line = line;
        this.columnIndex = columnIndex;
        this.findWord = findWord;
    }

    @Override
    protected Integer compute() {
        Integer result = count(line, columnIndex, findWord);          
        return result;
    }

    private Integer count(String[] line, int indexColumn, String findWord) {
        int counter = 0;
        if (line[indexColumn].equals(findWord)) {
            counter++;
        }
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();

        }
        return counter;
    }

}

DocumentTask.java文檔任務類

package com.myth;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.RecursiveTask;

public class DocumentTask extends RecursiveTask<Integer> {

    private List<String[]> document;
    private int rowIndexStart, rowIndexEnd, columnIndex;
    private String findWord;

    public DocumentTask(List<String[]> document, int rowIndexStart, int rowIndexEnd, int columnIndex, String findWord) {
        this.document = document;
        this.rowIndexStart = rowIndexStart;
        this.rowIndexEnd = rowIndexEnd;
        this.columnIndex = columnIndex;
        this.findWord = findWord;
        System.out.println("rowIndexStart = " + rowIndexStart + " rowIndexEnd = " + rowIndexEnd);
    }

    protected Integer compute() {
        int result = 0;
        if (rowIndexEnd - rowIndexStart < 10) {
            result = processLines(document, rowIndexStart, rowIndexEnd, columnIndex, findWord);
        } else {
            int mid = (rowIndexStart + rowIndexEnd) / 2;
            DocumentTask docTask1 = new DocumentTask(document, rowIndexStart, mid, columnIndex, findWord);
            DocumentTask docTask2 = new DocumentTask(document, mid, rowIndexEnd, columnIndex, findWord);
            invokeAll(docTask1, docTask2);
            try {
                result = groupTaskSum(docTask1.get(), docTask2.get());
            } catch (InterruptedException | ExecutionException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    private Integer processLines(List<String[]> document, int rowIndexStart, int rowIndexEnd, int columnIndex, String findWord) {
        List<LineTask> tasks = new ArrayList<>();
        for (int i = rowIndexStart; i < rowIndexEnd; i++) {
            LineTask task = new LineTask(document.get(i), columnIndex, findWord);
            tasks.add(task);
        }
        invokeAll(tasks);
        int result = 0;

        for (int i = 0; i < tasks.size(); i++) {
            LineTask task = tasks.get(i);
            try {
                result = result + task.get();
            } catch (InterruptedException | ExecutionException e) {
                e.printStackTrace();
            }
        }
        return new Integer(result);
    }

    private Integer groupTaskSum(Integer num1, Integer num2) {
        Integer result;
        result = num1 + num2;
        return result;
    }

}

MultiTask.java 多任務啓動入口

package com.myth;

import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.TimeUnit;

public class MultiTask {

    public static void main(String[] args) {
        String findWord1 = "sunlight";
        String findWord2 = "秋";
        int columnCount = 4;
        int columnIndex = 1;
        int rowIndexStart = 0;
        int rowIndexEnd = 1000;

        Document doc = new Document();
        //List<String[]> document = doc.generateDocument(rowIndexEnd, columnCount, columnIndex,findWord1);
        //DocumentTask docTask = new DocumentTask(document, rowIndexStart, rowIndexEnd, columnIndex, findWord1);
        List<String[]> document = doc.getDocument(columnCount, columnIndex, findWord2);
        DocumentTask docTask = new DocumentTask(document, rowIndexStart, rowIndexEnd, columnIndex, findWord2);
        ForkJoinPool pool = new ForkJoinPool();
        pool.execute(docTask);
        do {
            System.out.printf("******************************************\n");
            System.out.printf("MultiTask: Parallelism: %d\n", pool.getParallelism());
            System.out.printf("MultiTask: Active Threads: %d\n", pool.getActiveThreadCount());
            System.out.printf("MultiTask: Task Count: %d\n", pool.getQueuedTaskCount());
            System.out.printf("MultiTask: Steal Count: %d\n", pool.getStealCount());
            System.out.printf("******************************************\n");
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        } while (!docTask.isDone());
        pool.shutdown();
        try {
            pool.awaitTermination(1, TimeUnit.DAYS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        try {
            //System.out.printf("MultiTask: The word %s appears %d times in the document.\n", findWord1, docTask.get());
            System.out.printf("MultiTask: The word %s appears %d times in the document.\n", findWord2, docTask.get());
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }

}

註釋掉 DocumentTask.java文件代碼中第20行控制檯輸出內容,會打印如下信息:

run:
Document: The word 秋 appears 20 times in the initial document
******************************************
MultiTask: Parallelism: 4
MultiTask: Active Threads: 4
MultiTask: Task Count: 32
MultiTask: Steal Count: 0
******************************************
******************************************
MultiTask: Parallelism: 4
MultiTask: Active Threads: 4
MultiTask: Task Count: 18
MultiTask: Steal Count: 0
******************************************
******************************************
MultiTask: Parallelism: 4
MultiTask: Active Threads: 4
MultiTask: Task Count: 27
MultiTask: Steal Count: 0
******************************************
MultiTask: The word 秋 appears 20 times in the document.
BUILD SUCCESSFUL (total time: 3 seconds)

我們不去註釋掉 DocumentTask.java文件代碼中第20行控制檯輸出內容,會打印如下信息:

run:
Document: The word 秋 appears 20 times in the initial document
rowIndexStart = 0 rowIndexEnd = 1000
******************************************
rowIndexStart = 0 rowIndexEnd = 500
rowIndexStart = 500 rowIndexEnd = 1000
MultiTask: Parallelism: 4
MultiTask: Active Threads: 2
rowIndexStart = 500 rowIndexEnd = 750
rowIndexStart = 750 rowIndexEnd = 1000
rowIndexStart = 0 rowIndexEnd = 250
rowIndexStart = 250 rowIndexEnd = 500
rowIndexStart = 500 rowIndexEnd = 625
rowIndexStart = 625 rowIndexEnd = 750
rowIndexStart = 500 rowIndexEnd = 562
rowIndexStart = 562 rowIndexEnd = 625
rowIndexStart = 500 rowIndexEnd = 531
rowIndexStart = 531 rowIndexEnd = 562
rowIndexStart = 500 rowIndexEnd = 515
rowIndexStart = 515 rowIndexEnd = 531
rowIndexStart = 500 rowIndexEnd = 507
rowIndexStart = 507 rowIndexEnd = 515
MultiTask: Task Count: 0
rowIndexStart = 0 rowIndexEnd = 125
MultiTask: Steal Count: 0
******************************************
rowIndexStart = 125 rowIndexEnd = 250
rowIndexStart = 0 rowIndexEnd = 62
rowIndexStart = 62 rowIndexEnd = 125
rowIndexStart = 0 rowIndexEnd = 31
rowIndexStart = 31 rowIndexEnd = 62
rowIndexStart = 0 rowIndexEnd = 15
rowIndexStart = 15 rowIndexEnd = 31
rowIndexStart = 0 rowIndexEnd = 7
rowIndexStart = 7 rowIndexEnd = 15
rowIndexStart = 750 rowIndexEnd = 875
rowIndexStart = 875 rowIndexEnd = 1000
rowIndexStart = 750 rowIndexEnd = 812
rowIndexStart = 812 rowIndexEnd = 875
rowIndexStart = 750 rowIndexEnd = 781
rowIndexStart = 781 rowIndexEnd = 812
rowIndexStart = 750 rowIndexEnd = 765
rowIndexStart = 765 rowIndexEnd = 781
rowIndexStart = 750 rowIndexEnd = 757
rowIndexStart = 757 rowIndexEnd = 765
rowIndexStart = 250 rowIndexEnd = 375
rowIndexStart = 375 rowIndexEnd = 500
rowIndexStart = 250 rowIndexEnd = 312
rowIndexStart = 312 rowIndexEnd = 375
rowIndexStart = 250 rowIndexEnd = 281
rowIndexStart = 281 rowIndexEnd = 312
rowIndexStart = 250 rowIndexEnd = 265
rowIndexStart = 265 rowIndexEnd = 281
rowIndexStart = 250 rowIndexEnd = 257
rowIndexStart = 257 rowIndexEnd = 265
rowIndexStart = 515 rowIndexEnd = 523
rowIndexStart = 523 rowIndexEnd = 531
rowIndexStart = 765 rowIndexEnd = 773
rowIndexStart = 15 rowIndexEnd = 23
rowIndexStart = 23 rowIndexEnd = 31
rowIndexStart = 773 rowIndexEnd = 781
rowIndexStart = 265 rowIndexEnd = 273
rowIndexStart = 273 rowIndexEnd = 281
rowIndexStart = 531 rowIndexEnd = 546
rowIndexStart = 781 rowIndexEnd = 796
rowIndexStart = 281 rowIndexEnd = 296
rowIndexStart = 31 rowIndexEnd = 46
rowIndexStart = 296 rowIndexEnd = 312
rowIndexStart = 796 rowIndexEnd = 812
rowIndexStart = 546 rowIndexEnd = 562
rowIndexStart = 531 rowIndexEnd = 538
rowIndexStart = 781 rowIndexEnd = 788
rowIndexStart = 281 rowIndexEnd = 288
rowIndexStart = 288 rowIndexEnd = 296
rowIndexStart = 46 rowIndexEnd = 62
rowIndexStart = 788 rowIndexEnd = 796
rowIndexStart = 538 rowIndexEnd = 546
rowIndexStart = 31 rowIndexEnd = 38
rowIndexStart = 38 rowIndexEnd = 46
rowIndexStart = 796 rowIndexEnd = 804
rowIndexStart = 46 rowIndexEnd = 54
rowIndexStart = 296 rowIndexEnd = 304
rowIndexStart = 304 rowIndexEnd = 312
rowIndexStart = 546 rowIndexEnd = 554
rowIndexStart = 554 rowIndexEnd = 562
rowIndexStart = 54 rowIndexEnd = 62
rowIndexStart = 804 rowIndexEnd = 812
rowIndexStart = 312 rowIndexEnd = 343
rowIndexStart = 343 rowIndexEnd = 375
rowIndexStart = 312 rowIndexEnd = 327
rowIndexStart = 327 rowIndexEnd = 343
rowIndexStart = 312 rowIndexEnd = 319
rowIndexStart = 319 rowIndexEnd = 327
rowIndexStart = 812 rowIndexEnd = 843
rowIndexStart = 843 rowIndexEnd = 875
rowIndexStart = 812 rowIndexEnd = 827
rowIndexStart = 562 rowIndexEnd = 593
rowIndexStart = 593 rowIndexEnd = 625
rowIndexStart = 62 rowIndexEnd = 93
rowIndexStart = 93 rowIndexEnd = 125
rowIndexStart = 562 rowIndexEnd = 577
rowIndexStart = 577 rowIndexEnd = 593
rowIndexStart = 562 rowIndexEnd = 569
rowIndexStart = 569 rowIndexEnd = 577
rowIndexStart = 827 rowIndexEnd = 843
rowIndexStart = 62 rowIndexEnd = 77
rowIndexStart = 77 rowIndexEnd = 93
rowIndexStart = 812 rowIndexEnd = 819
rowIndexStart = 819 rowIndexEnd = 827
rowIndexStart = 62 rowIndexEnd = 69
rowIndexStart = 69 rowIndexEnd = 77
rowIndexStart = 327 rowIndexEnd = 335
rowIndexStart = 335 rowIndexEnd = 343
rowIndexStart = 827 rowIndexEnd = 835
rowIndexStart = 835 rowIndexEnd = 843
rowIndexStart = 577 rowIndexEnd = 585
rowIndexStart = 585 rowIndexEnd = 593
rowIndexStart = 77 rowIndexEnd = 85
rowIndexStart = 85 rowIndexEnd = 93
rowIndexStart = 343 rowIndexEnd = 359
rowIndexStart = 359 rowIndexEnd = 375
rowIndexStart = 343 rowIndexEnd = 351
rowIndexStart = 351 rowIndexEnd = 359
rowIndexStart = 593 rowIndexEnd = 609
rowIndexStart = 609 rowIndexEnd = 625
rowIndexStart = 593 rowIndexEnd = 601
rowIndexStart = 601 rowIndexEnd = 609
rowIndexStart = 843 rowIndexEnd = 859
rowIndexStart = 859 rowIndexEnd = 875
rowIndexStart = 843 rowIndexEnd = 851
rowIndexStart = 851 rowIndexEnd = 859
rowIndexStart = 93 rowIndexEnd = 109
rowIndexStart = 109 rowIndexEnd = 125
rowIndexStart = 93 rowIndexEnd = 101
rowIndexStart = 101 rowIndexEnd = 109
******************************************
MultiTask: Parallelism: 4
MultiTask: Active Threads: 4
MultiTask: Task Count: 34
MultiTask: Steal Count: 0
******************************************
rowIndexStart = 359 rowIndexEnd = 367
rowIndexStart = 367 rowIndexEnd = 375
rowIndexStart = 609 rowIndexEnd = 617
rowIndexStart = 859 rowIndexEnd = 867
rowIndexStart = 867 rowIndexEnd = 875
rowIndexStart = 617 rowIndexEnd = 625
rowIndexStart = 109 rowIndexEnd = 117
rowIndexStart = 117 rowIndexEnd = 125
rowIndexStart = 375 rowIndexEnd = 437
rowIndexStart = 437 rowIndexEnd = 500
rowIndexStart = 375 rowIndexEnd = 406
rowIndexStart = 406 rowIndexEnd = 437
rowIndexStart = 375 rowIndexEnd = 390
rowIndexStart = 390 rowIndexEnd = 406
rowIndexStart = 375 rowIndexEnd = 382
rowIndexStart = 382 rowIndexEnd = 390
rowIndexStart = 625 rowIndexEnd = 687
rowIndexStart = 875 rowIndexEnd = 937
rowIndexStart = 937 rowIndexEnd = 1000
rowIndexStart = 875 rowIndexEnd = 906
rowIndexStart = 906 rowIndexEnd = 937
rowIndexStart = 687 rowIndexEnd = 750
rowIndexStart = 875 rowIndexEnd = 890
rowIndexStart = 890 rowIndexEnd = 906
rowIndexStart = 875 rowIndexEnd = 882
rowIndexStart = 882 rowIndexEnd = 890
rowIndexStart = 625 rowIndexEnd = 656
rowIndexStart = 656 rowIndexEnd = 687
rowIndexStart = 625 rowIndexEnd = 640
rowIndexStart = 640 rowIndexEnd = 656
rowIndexStart = 625 rowIndexEnd = 632
rowIndexStart = 632 rowIndexEnd = 640
rowIndexStart = 125 rowIndexEnd = 187
rowIndexStart = 187 rowIndexEnd = 250
rowIndexStart = 125 rowIndexEnd = 156
rowIndexStart = 156 rowIndexEnd = 187
rowIndexStart = 125 rowIndexEnd = 140
rowIndexStart = 140 rowIndexEnd = 156
rowIndexStart = 125 rowIndexEnd = 132
rowIndexStart = 132 rowIndexEnd = 140
rowIndexStart = 390 rowIndexEnd = 398
rowIndexStart = 398 rowIndexEnd = 406
rowIndexStart = 890 rowIndexEnd = 898
rowIndexStart = 898 rowIndexEnd = 906
rowIndexStart = 640 rowIndexEnd = 648
rowIndexStart = 648 rowIndexEnd = 656
rowIndexStart = 140 rowIndexEnd = 148
rowIndexStart = 148 rowIndexEnd = 156
rowIndexStart = 406 rowIndexEnd = 421
rowIndexStart = 421 rowIndexEnd = 437
rowIndexStart = 406 rowIndexEnd = 413
rowIndexStart = 413 rowIndexEnd = 421
rowIndexStart = 656 rowIndexEnd = 671
rowIndexStart = 671 rowIndexEnd = 687
rowIndexStart = 906 rowIndexEnd = 921
rowIndexStart = 921 rowIndexEnd = 937
rowIndexStart = 656 rowIndexEnd = 663
rowIndexStart = 663 rowIndexEnd = 671
rowIndexStart = 906 rowIndexEnd = 913
rowIndexStart = 913 rowIndexEnd = 921
rowIndexStart = 156 rowIndexEnd = 171
rowIndexStart = 171 rowIndexEnd = 187
rowIndexStart = 156 rowIndexEnd = 163
rowIndexStart = 163 rowIndexEnd = 171
rowIndexStart = 421 rowIndexEnd = 429
rowIndexStart = 429 rowIndexEnd = 437
rowIndexStart = 671 rowIndexEnd = 679
rowIndexStart = 679 rowIndexEnd = 687
rowIndexStart = 921 rowIndexEnd = 929
rowIndexStart = 929 rowIndexEnd = 937
rowIndexStart = 171 rowIndexEnd = 179
rowIndexStart = 179 rowIndexEnd = 187
rowIndexStart = 937 rowIndexEnd = 968
rowIndexStart = 968 rowIndexEnd = 1000
rowIndexStart = 437 rowIndexEnd = 468
rowIndexStart = 468 rowIndexEnd = 500
rowIndexStart = 687 rowIndexEnd = 718
rowIndexStart = 718 rowIndexEnd = 750
rowIndexStart = 437 rowIndexEnd = 452
rowIndexStart = 452 rowIndexEnd = 468
rowIndexStart = 937 rowIndexEnd = 952
rowIndexStart = 952 rowIndexEnd = 968
rowIndexStart = 437 rowIndexEnd = 444
rowIndexStart = 444 rowIndexEnd = 452
rowIndexStart = 687 rowIndexEnd = 702
rowIndexStart = 937 rowIndexEnd = 944
rowIndexStart = 702 rowIndexEnd = 718
rowIndexStart = 687 rowIndexEnd = 694
rowIndexStart = 694 rowIndexEnd = 702
rowIndexStart = 944 rowIndexEnd = 952
rowIndexStart = 187 rowIndexEnd = 218
rowIndexStart = 218 rowIndexEnd = 250
rowIndexStart = 187 rowIndexEnd = 202
rowIndexStart = 202 rowIndexEnd = 218
rowIndexStart = 187 rowIndexEnd = 194
rowIndexStart = 194 rowIndexEnd = 202
******************************************
MultiTask: Parallelism: 4
MultiTask: Active Threads: 4
MultiTask: Task Count: 30
MultiTask: Steal Count: 0
******************************************
rowIndexStart = 452 rowIndexEnd = 460
rowIndexStart = 460 rowIndexEnd = 468
rowIndexStart = 702 rowIndexEnd = 710
rowIndexStart = 710 rowIndexEnd = 718
rowIndexStart = 952 rowIndexEnd = 960
rowIndexStart = 960 rowIndexEnd = 968
rowIndexStart = 202 rowIndexEnd = 210
rowIndexStart = 210 rowIndexEnd = 218
rowIndexStart = 468 rowIndexEnd = 484
rowIndexStart = 484 rowIndexEnd = 500
rowIndexStart = 468 rowIndexEnd = 476
rowIndexStart = 476 rowIndexEnd = 484
rowIndexStart = 968 rowIndexEnd = 984
rowIndexStart = 984 rowIndexEnd = 1000
rowIndexStart = 968 rowIndexEnd = 976
rowIndexStart = 976 rowIndexEnd = 984
rowIndexStart = 718 rowIndexEnd = 734
rowIndexStart = 734 rowIndexEnd = 750
rowIndexStart = 718 rowIndexEnd = 726
rowIndexStart = 726 rowIndexEnd = 734
rowIndexStart = 218 rowIndexEnd = 234
rowIndexStart = 234 rowIndexEnd = 250
rowIndexStart = 218 rowIndexEnd = 226
rowIndexStart = 226 rowIndexEnd = 234
rowIndexStart = 984 rowIndexEnd = 992
rowIndexStart = 992 rowIndexEnd = 1000
rowIndexStart = 484 rowIndexEnd = 492
rowIndexStart = 492 rowIndexEnd = 500
rowIndexStart = 734 rowIndexEnd = 742
rowIndexStart = 742 rowIndexEnd = 750
rowIndexStart = 234 rowIndexEnd = 242
rowIndexStart = 242 rowIndexEnd = 250
MultiTask: The word 秋 appears 20 times in the document.
BUILD SUCCESSFUL (total time: 3 seconds)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章