2017-05-06 9 views
0

私はテキストデータを含む巨大なテキストファイルを持っています。ファイルの各行には12文字のデータが含まれています。 map reduceジョブを使用して、そのファイルから5文字の部分文字列を見つける必要があります。続行ストリームのジョブを減らす

入力ファイル。 'CDEFGが' ファイルのどこにでも発生することができます

cdefg 

を検索する

abcdefghijkl 
kahfdjshjsdh 
sdfkjsdjkjks 

値。それは2行にすることができます。だから私は現在の行の最後の2文字と次の行の次の3文字のマップを作成する方法を知らない。

+1

これまでに何を試しましたか? – bouteillebleu

+0

@bouteillebleu私は、入力文字列の行を5行に分割し、そのためのマップを作成するが、入力文字列の最後の2文字をどのように扱うかわからない単純なプログラムを書いた。 –

+0

あなたは 'cdefg'を含む行を返したいですか? –

答えて

0

私は12文字の行を含むファイルを持っていて、そのファイルから5文字の文字を見つける必要があります。マッパーでは、私は12の 行の文字を取得していると5文字の2つのマップを作成し、2 文字を残し、次の行から次の3文字を取得したいと それのマップを作成します。減速機では、そのマップを私の 文字列と比較することができます。

File file = new File("myFile.txt"); 
try { 
    Scanner scanner = new Scanner(file); 
    String result = ""; 
    while (scanner.hasNextLine()) { 
     String line = scanner.nextLine(); 
     result += line; 
    } 
    System.out.println(result); 
    //here you can use this array 
    String spl[] = result.split("(?<=\\G.....)"); 

    System.out.println(Arrays.toString(spl)); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} 

abcdefghijklkahfdjshjsdhsdfkjsdjkjks 
[abcde, fghij, klkah, fdjsh, jsdhs, dfkjs, djkjk, s] 

あなたは、コードのこの部分から解決策を鼓舞することができます

あなたは、これはSplitting a string at every n-th characterチェックし、あなたが5文字で結果を分割することができ、すべて一緒にあなたのラインを連結することができます

出力

abcdefghijklkahfdjshjsdhsdfkjsdjkjks 
[abcde, fghij, klkah, fdjsh, jsdhs, dfkjs, djkjk, s] 

私は、これは をabcdefghijklkahfdjshjsdhsdfkjsdjkjksのようなマップを作成したいEDIT

[ABCDE、BCDEF、CDEFG、defgh ...]

あなたはそうのように、この問題を解決することができます:

String str = "abcdefghijklkahfdjshjsdhsdfkjsdjkjks"; 
List<String> list = new ArrayList<>(); 

for (int i = 0; i < str.length()-4; i++) { 
    String s = ""; 
    for (int j = i; j < i+5; j++) { 
     s+=result.charAt(j); 
    } 
    list.add(s); 
} 

出力

[abcde, bcdef, cdefg, defgh, efghi, fghij, ghijk, ...., djkjk, jkjks] 
+0

与え[ABCDE、BCDEF、CDEFG、defgh ...]を願って、次の行と最後の2つの文字を連結する –

+0

2ndly必要が開始私の答えをチェックし、文字 –

+0

ので、あなたの配列の最後の値は 'jkjks' right @IbrarAhmedですか? –

関連する問題