文字列の均等分割
この問題は、除算だけでははく算術演算とか、文字列の長さをstrlenの類いで測るとかをしなくても、多分書けるのではないかと思います。
Posted feedbacks - Java
Javaで書いてみました。 一応String::lengthを使わないことだけ意識しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import java.io.IOException;
import java.io.StringReader;
public class Divid {
public static void main(String[] args) throws IOException{
int[] n = new int[Integer.parseInt(args[0])];
String target = args[1];
for (int i = 0; i < n.length; i++) {
n[i] = 0;
}
int turn = 0;
StringReader reader = new StringReader(target);
while(reader.read() != -1){
n[turn++]++;
if (turn == n.length)
turn = 0;
}
String v[] = new String[n.length];
int pos = 0;
for (int i = 0; i < n.length; i++) {
v[i] = target.substring(pos, (pos = (pos + n[i])));
System.out.println(v[i]);
}
}
}
|
先に何文字で分割するかを計算させてから文字分割しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import java.util.*;
public class Divide {
public static void main(String[] args) {
String sample = "ゆめよりもはかなき世のなかをなげきわびつゝあかしくらすほどに四月十よひにもなりぬれば木のしたくらがりもてゆく";
System.out.println(Arrays.toString(devide(sample, 4)));
System.out.println(Arrays.toString(devide(sample, 5)));
System.out.println(Arrays.toString(devide(sample, 6)));
}
public static String[] devide(String s, int r) {
int[] x = new int[r];
for (int i = 0, j = 0; i < s.length(); i++, j++) {
if (j >= x.length) j = 0;
x[j]++;
}
List<String> list = new ArrayList<String>(r);
for (int i = 0; i < x.length; i++) {
list.add(s.substring(0, x[i]));
s = s.substring(x[i]);
}
return list.toArray(new String[0]);
}
}
|
すばらしい! ありがとうございます。




nobsun
#4090()
Rating-1/3=-0.33
1 reply [ reply ]