可视化长文本并编辑处理中的内容

时间:2016-07-09 09:56:31

标签: java processing

我试图重新创建此$23.2.1/4 General container requirements [container.requirements.general] Table 100 — Container requirements以了解如何在处理中可视化长文本。 就我所写的那一刻:

import processing.pdf.*;

PFont f;
String txt [];
String myData [];
ArrayList romeopos = new ArrayList();
ArrayList julietpos  = new ArrayList();



void setup() {
  size(600, 800, P2D);
  background(255);
  f = createFont("Garamond", 9);
  txt=loadStrings("test.txt");  


  myData = new String[txt.length];
  myData = txt[0].split(" ");
}



void draw() {
  noLoop();
  fill(50);
  textFont(f);

  for (int i=0; i<myData.length; i++) {

    if ( myData[i].toLowerCase().contains("romeo"))
      romeopos.add(i);
    if ( myData[i].toLowerCase().contains("juliet"))
      julietpos.add(i);
  }

  // text(txt[0], 10, 10, width-20, height-10);
  // println (myData);
}

我不知道如何继续,你能帮助我吗? .txt是罗密欧和朱丽叶写成一行。

1 个答案:

答案 0 :(得分:1)

让我们分解您需要采取的步骤,以便在Java中使用Processing重新创建该海报:

  • 你需要打开并加载一个包含整个文本罗密欧与朱丽叶的文件,为此我会使用Scanner Java类
  • 您应该将每行文本保存为本地变量

    String line = scanner.nextLine();
    
  • 使用yourTextSize全局变量来跟踪您决定使用的textSize()。您需要将此变量乘以每行文本的计数器:

    int yPosition = yourTextSize*lineCounter;
    text(line, paddingX, yPosition);
    
  • 现在你有了当前行的yPosition,使用indexOf(String str)的组合检查行 和{index {3}}的indexOf(String str,int fromIndex)方法,用于所有“Romeo”字符串的字符索引。为了更容易地计算出“罗密欧”字符索引的x坐标,请使用等宽字体。将所有Romeo点存储在ArrayList中。以相同的方式查找所有“Juliet”索引,并将Juliet点存储在单独的ArrayList中。使用Point Java对象存储这些点。

  • 最后,在海报中看到罗密欧的每个实例都用红线连接到朱丽叶的每一个实例。在for循环中迭代Romeo点ArrayList,每次使用Processing的line()绘制一条线到Juliet数组列表中的所有点。

    for (int i = 0; i < Romeo.length(); i++) {
        for (int j = 0; j < Juliet.length(); j++) {
            line(Romeo.get(i).getX, Romeo.get(i).getY, Juliet.get(j).getX, Juliet.get(j).getY);
        }
    }
    

我在处理这个项目时的建议是从小做起;使用1/16的比赛直到你差不多完成了比赛。如果您使用合理大小的字体,只需渲染罗密欧与朱丽叶的整个文本将需要一些时间。你需要制作尺寸(宽度,高度);您的计划非常适合整场比赛。您似乎刚刚开始学习如何使用Processing进行编码,或者尝试在处理这个项目之前尝试一些更简单的项目?如果你欣赏我投入的时间,请批准我的回答:)。如果您对我的回答有任何一般概念性问题我会很乐意跟进,但我想如果您对StackOverflow上尚未回答的类或API提出任何具体的后续问题,那么您应该在另一篇文章中询问他们