同人文生成器/狗屁不通文章生成器/各种生成器 简易写法
网上有很多这种生成器,准备自己用java来写写。作为一个java菜鸡,用到的方法很简单。
主要逻辑就是用ArrayList把句子都添加进去,然后重组。
用同人文生成器举例,首先用Scanner得到主角1和主角2的名字:
System.out.print("主角1的名字");
Scanner in = new Scanner ( System.in );
String x = in.nextLine();
System.out.print("主角2的名字");
Scanner in2 = new Scanner ( System.in );
String y = in.nextLine();
然后生成一个ArrayList,用它来装自己输进去的句子:
ArrayList<String> sentence = new ArrayList <String>();
写一个function来装句子:
putSentences(sentence);
public static void putSentences(ArrayList<String> sen) {
sen.add("XXXXX");
}
然后add后面就可以填入任意句子。
add的时候我们把两个人的名字用特定字符表示(e.g. 主角1是3,主角2是4)要注意这两个字符不能与input主角名的字母重复,因为后面要用到替代,比如我会把所有3都替换成主角1的input name,4都换成主角2的input name。
举个例子:
sen.add("只有明知与4相关的事情,才能让3感受到岁月的深刻,找到关于未来的支点。");
填好过后,就只用把这些句子重组了,我们写一个function:
System.out.println(getLit(sentence, x, y));
public static String getLit(ArrayList<String> sen,String n1, String n2)
{
String finR = ""; String get = ""; int k = 99;
while (sen.size()>20)
{ k = (int)(Math.random()*sen.size());
get = sen.get(k); get = get.replaceAll("3",n1); get=get.replaceAll("4",n2);
sen.set(k,get);
finR= finR+ sen.remove(k);}
return finR;
}
-
用random得到一个位置k
-
得到k位置的对应句子,然后“换头“。
这个时候就把所有的特定字符(用来表示主角1和2的)换成我们用Scanner得到的input names。用String的replaceAll这个function来换头。
-
remove这个k位置上的sentence,把这个remove的return添加到最终的String里。
这一步可以防止句子重复添加,ArrayList的remove这个方法中,它return的就是我们remove掉的东西。所以相当于我们把选中的句子从ArrayList里remove出来,添加到最终的String里。
-
因为我加了很多句子进去,每次不一定要把所有句子都重组,所以写了个while loop,在这个ArrayList长度小于等于20时,就不继续生成了。
-
最后return这个finR,也就是最终的String,包含了我们随机换头后的所有句子。
使整篇文章更加通顺,可以适当添加\n来提行。可以写一个random来随机提行,也可以在比较长的句子后面直接写\n提行。
还是挺好玩的,初学者们值得一试!!