【问题标题】:Graphviz language from jsp view Dynamic来自jsp视图动态的Graphviz语言
【发布时间】:2011-10-12 18:59:25
【问题描述】:

我有一些角色,每个角色都有用户。

所以我的问题是根据否。角色和没有。选择的用户我必须使用 graphviz 创建一个图表。 Graphviz 语言就像 (A -> B;)(B -> C;)(B -> D;)(C -> E;)(D -> E;)(E -> F)

所以我必须根据我拥有的角色和没有的角色来创建图形语言。我选择的用户...

传入的字符串类似于 = (1CS_3Admin_1BOD_2SH_1Others)。 这种语言的图表可能是这样的:-


marapet 这就是我正在做的。

我的语言类似于 1CS_3Admin_1BOD_2SH_1Others 其中 1,3,1,2 是选择的用户数,例如 1CS 表示一个用户担任 CS 角色。现在我用 '_' 作为分隔符将它们分开。现在我得到一个字符串数组。所以真正的问题是从这个字符串数组值中创建一种语言。 这里'name'是我得到的字符串:-

Graphviz gv = new Graphviz();
          gv.addln(gv.start_graph());
          gv.addln("Start;");

          if(name.startsWith("_"));
            name=name.substring(1);

          String[] str=null;

          if(name.contains("_"))
              str = name.split("_");

          int sPreviousRepeat=0;
          String sPrevious="";
          int sCurrRepeat=0;
          String sCurr="";

          String finalInst="Start -> ";

        for(int i=0;i<str.length;i++) {
             sCurrRepeat=Integer.parseInt(String.valueOf(str[i].charAt(0)));
             sCurr=str[i].substring(1);
             if(i!=0){
                 sPreviousRepeat = Integer.parseInt(String.valueOf(str[i-1].charAt(0)));
                 sPrevious = str[i-1].substring(1);
             }

             if(sCurrRepeat==1){
                 if(i==0)
                     finalInst=finalInst+sCurr+";";
                 else
                     finalInst=finalInst + sPrevious+" -> "+sCurr+";";
             }
             else{
                 for(int j=0;j<sCurrRepeat;j++){

                    //cant figure out????? 

                 }

             }

         }

【问题讨论】:

  • 尽管由于本地图像路径而受到 +1 的诱惑,但您应该上传这些图像并使用其他 stackoverflow 用户可以访问的 url 引用它们。尤其是因为这可能有助于我们了解您的问题到底是什么。
  • 实际上我的声望分数是 10 那就是我无法上传图片。上传图片需要 10+ 声望
  • 直接上传到imgur.com并使用链接
  • 我的问题是如何创建一个读取字符串并为graphviz创建语言的java程序。
  • 真正的问题是什么,如何将来自 JSP 的内容转化为 DOT?也不确定该字符串实际包含什么。

标签: java graphviz


【解决方案1】:

以下是我解决问题的方法:

  1. 将输入字符串解析成一个数据结构,表示 n 个有序对的角色用户数
  2. 从 #1 中的数据结构创建图形(graphviz dot)的语法
  3. 将 graphviz 语法转换为实际图像

您需要学习以下内容:

  • Graphviz 语法
  • 制作简单的 Java 命令行程序
  • 在 Java 中解析和操作字符串(拆分等)
  • 从 java (dot.exe) 调用可执行文件

【讨论】:

  • 我知道您指定的所有内容,但我无法创建将字符串转换为 Graphviz 语法的程序。
  • 如果你知道如何制作一个命令行 java 程序,你知道如何在 Java 中操作字符串,你知道 graphviz 语法,但你不知道如何组合,你必须更具体,并告诉我们您到底在哪里遇到问题。从第一个问题开始:你有编译的 java 命令行程序(“hello world”)吗?您可以将参数(输入字符串)传递给它吗?你能解析输入字符串吗?向我们展示您目前所拥有的。
【解决方案2】:

我想我成功了。

          if(name.contains("_"))
          str = name.split("_");

      int sPreviousRepeat=0;
      String sPrevious="";
      int sCurrRepeat=0;
      String sCurr="";

      String finalInst="Start -> ";

    for(int i=0;i<str.length;i++) {
         sCurrRepeat=Integer.parseInt(String.valueOf(str[i].charAt(0)));
         sCurr=str[i].substring(1);
         if(i!=0){
             sPreviousRepeat = Integer.parseInt(String.valueOf(str[i-1].charAt(0)));
             sPrevious = str[i-1].substring(1);
         }

         if(sCurrRepeat==1){
             if(i==0)
                 finalInst=finalInst+sCurr+";";
             else if(sPreviousRepeat>1){
                 for(int j=0;j<sPreviousRepeat;j++)
                     finalInst=finalInst + sPrevious+(j+1)+" -> "+sCurr+";";
             }
             else
                 finalInst=finalInst + sPrevious+" -> "+sCurr+";";
         }
         else{
             for(int j=0;j<sCurrRepeat;j++){
                 finalInst=finalInst + sPrevious+" -> "+sCurr+(j+1)+";";                                     
             }

         }

     }

【讨论】:

  • 我建议将输入的解析与 graphviz 代码的创建分开。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
相关资源
最近更新 更多