同人生成器/狗屁不通文章生成器/各种生成器 简易写法

网上有很多这种生成器,准备自己用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提行。

还是挺好玩的,初学者们值得一试!!