Advertisement
Guest User

Java Plotter - By Facebamm

a guest
Jul 23rd, 2015
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.38 KB | None | 0 0
  1. package daniel.textcodierer;
  2.  
  3. import android.content.Context;
  4. import android.util.Log;
  5.  
  6. import java.util.ArrayList;
  7. import java.util.regex.Matcher;
  8. import java.util.regex.Pattern;
  9.  
  10. import static daniel.textcodierer.R.string.HochPatter;
  11. import static daniel.textcodierer.R.string.MalGeteiltPatter;
  12. import static daniel.textcodierer.R.string.PlusMinusPatter;
  13. import static java.lang.Float.parseFloat;
  14. import static java.lang.Math.PI;
  15.  
  16. /**
  17.  * Created by daniel on 16.07.2015.
  18.  * Upadate by daniel on 22.07.2015.
  19.  */
  20. public class regex {
  21.     String Aufgabe;
  22.     String TAG = "REGEAUS";
  23.     Context ctx;
  24.     ArrayList<rechnungen> Rechnungen;
  25.  
  26.     public regex(Context ctx,String Aufgabe)
  27.  
  28.     {   this.ctx = ctx;
  29.         Rechnungen = new ArrayList<>();
  30.         this.Aufgabe = Aufgabe.toLowerCase().replaceAll(" ", "");
  31.         Log.d(TAG,"Regex startup " + this.Aufgabe);
  32.         Matcher m = Pattern.compile("((\\)|\\d+)\\()").matcher(Aufgabe);
  33.         while(m.find())
  34.         {
  35.             String Ziffer = m.group(2);
  36.             Log.d(TAG, String.valueOf("Ersetzt " + m.group(1) + "zu " + Ziffer + "*("));
  37.             this.Aufgabe = this.Aufgabe.replace(m.group(1),String.valueOf(Ziffer + "*("));
  38.         }
  39.         Log.d(TAG,this.Aufgabe);
  40.         Log.d(TAG,"MStart SinCosTan");
  41.         new AllInOne();
  42.         Log.d(TAG,this.Aufgabe);
  43.     }
  44.     public String get()
  45.     {
  46.         return Aufgabe;
  47.     }
  48.  
  49.  
  50.     private class AllInOne
  51.     {
  52.         ArrayList<Typo> o;
  53.         public AllInOne()
  54.         {
  55.             delSin_Cos_Tan();
  56.             new klammer();
  57.             AllinOnePatter(Operat.Hoch);
  58.             AllinOnePatter(Operat.MAl_GETEILT);
  59.             AllinOnePatter(Operat.PLus_Minus);
  60.  
  61.         }
  62.         public void AllinOnePatter(Operat Ops)
  63.         {
  64.             Log.d(TAG,String.valueOf("Start StartRegex()"));
  65.             String aDate = Aufgabe;
  66.             Pattern datePattern = Pattern.compile(Ops.Patter);
  67.             Matcher matcher = datePattern.matcher(aDate);
  68.             Rechnungen = new ArrayList<>();
  69.             while (matcher.find()){
  70.                 double Zahl1, Zahl2;
  71.                 Zahl1 = StrgToDbl(matcher.group(2)); //3
  72.                 Zahl2 = StrgToDbl(matcher.group(4)); //5.5
  73.  
  74.                 String TeilSatz,Zeichen;
  75.                 TeilSatz = matcher.group(1); //3*5.5
  76.                 Zeichen = matcher.group(3); //*
  77.  
  78.                 int start =  matcher.start(1);
  79.                 int end  = matcher.end(1);
  80.  
  81.                 rechnungen Item  = new rechnungen(Zahl1,Zahl2,Zeichen,TeilSatz,start,end);
  82.                 Rechnungen.add(Item);
  83.             }
  84.             auflosen(Ops);
  85.         }
  86.  
  87.         private void auflosen(Operat Op)
  88.         {
  89.             for(rechnungen i: Rechnungen) {
  90.                 Log.d(TAG, String.valueOf("Start auflosen()"));
  91.                 Log.d(TAG, String.valueOf("Komplet " + i.Gesammt));
  92.                 Log.d(TAG, String.valueOf("Start at " + i.posi.x + " end at " + i.posi.xend));
  93.                 Log.d(TAG, String.valueOf("Number one " + i.Zahlen.get(0)));
  94.                 Log.d(TAG, String.valueOf("Number two " + i.Zahlen.get(1)));
  95.                 Log.d(TAG, String.valueOf("Operat " + i.Zeichen));
  96.                 String Ergebniss = String.valueOf(brechnung(i.Zeichen, i.Zahlen));
  97.                 Log.d(TAG, String.valueOf("Ergebnis " + Ergebniss));
  98.                 Aufgabe = Aufgabe.replace(i.Gesammt, Ergebniss);
  99.                 Log.d(TAG, Aufgabe);
  100.                 Log.d(TAG, String.valueOf("\n \n "));
  101.                 switch (Op)
  102.                 {
  103.                     case Hoch: AllinOnePatter(Op);
  104.                     case MAl_GETEILT: AllinOnePatter(Op);
  105.                     case PLus_Minus: AllinOnePatter(Op);
  106.                 }
  107.                 return;
  108.             }
  109.         }
  110.  
  111.         public void delSin_Cos_Tan()
  112.         {
  113.             o = new ArrayList<>();
  114.             String aDate = Aufgabe;
  115.             Pattern pattern = Pattern.compile(Operat.Sin_Cos_Tan.Patter);
  116.             Matcher matcher = pattern.matcher(aDate);
  117.             Log.d(TAG,Operat.Sin_Cos_Tan.Patter);
  118.             Log.d(TAG,"Sin Startz");
  119.             Log.d(TAG,"Sin " + Aufgabe);
  120.             while (matcher.find());
  121.             {
  122.  
  123.                 String Gesammt = null;
  124.                 String TYP = null;
  125.                 String Inklammer = null;
  126.                 Log.e(TAG, matcher.group(1));
  127.                 Gesammt = matcher.group(1);
  128.                 TYP = matcher.group(2);
  129.                 Inklammer = matcher.group(3);
  130.                 o.add(new Typo(Gesammt, TYP, Inklammer));
  131.  
  132.                 Log.d(TAG, String.valueOf("----------------------------"));
  133.                 Log.d(TAG, Gesammt);
  134.                 Log.d(TAG, Inklammer);
  135.                 Log.d(TAG, TYP);
  136.                 Log.d(TAG, String.valueOf("----------------------------"));
  137.             }
  138.             findenSin();
  139.         }
  140.  
  141.         public void findenSin()
  142.         {
  143.             for(Typo e : this.o)
  144.             {
  145.                 Aufgabe = Aufgabe.replace(e.all,e.getErgebniss());
  146.                 Log.d(TAG,"Starte Sin_Cos_Tan von Sin_Cos_Tan");
  147.                 delSin_Cos_Tan();
  148.                 return;
  149.             }
  150.         }
  151.  
  152.         private class Typo {
  153.             String all, Typ, Inklammer;
  154.             String EndInKlammer;
  155.  
  156.             public Typo(String all, String Typ, String Inklammer) {
  157.                 this.all = all;
  158.                 this.Typ = Typ;
  159.                 this.Inklammer = Inklammer;
  160.                 Log.d(TAG, "Starte regex von Sin_Cos_Tan mit " + all);
  161.                 this.EndInKlammer = new regex(ctx, Inklammer).get();
  162.             }
  163.  
  164.             public String getErgebniss() {
  165.                 return String.valueOf(parseFloat(String.valueOf(this.berechnen())));
  166.             }
  167.  
  168.             private double berechnen() {
  169.                 switch (Typ) {
  170.                     case "sin":
  171.                         return Math.sin(StrgToDbl(EndInKlammer));
  172.                     case "sinh":
  173.                         return Math.sinh(StrgToDbl(EndInKlammer));
  174.                     case "asin":
  175.                         return Math.asin(StrgToDbl(EndInKlammer));
  176.                     case "cos":
  177.                         return Math.cos(StrgToDbl(EndInKlammer));
  178.                     case "acos":
  179.                         return Math.acos(StrgToDbl(EndInKlammer));
  180.                     case "cosh":
  181.                         return Math.cosh(StrgToDbl(EndInKlammer));
  182.                     case "tan":
  183.                         return Math.tan(StrgToDbl(EndInKlammer));
  184.                     case "atan":
  185.                         return Math.atan(StrgToDbl(EndInKlammer));
  186.                     case "tanh":
  187.                         return Math.tanh(StrgToDbl(EndInKlammer));
  188.                 }
  189.                 return 0d;
  190.             }
  191.  
  192.         }
  193.     }
  194.  
  195.     private enum Operat
  196.     {
  197.         Hoch("((\\d+\\.\\d+|\\d+|pi)(\\^)(\\d+\\.\\d+|\\d+|pi))"),
  198.         Sin_Cos_Tan("((sin|cos|tan|sinh|cosh|tanh|asin|acos|atan)\\((.+)\\))"),
  199.         MAl_GETEILT("((\\d+\\.\\d+|\\d+|pi)(\\*|\\/)(\\d+\\.\\d+|\\d+|pi))"),
  200.         PLus_Minus("((\\d+\\.\\d+|\\d+|pi)(\\+|\\-)(\\d+\\.\\d+|\\d+|pi))");
  201.         private String Patter;
  202.         private Operat(String Patter)
  203.         {
  204.             this.Patter = Patter;
  205.         }
  206.     }
  207.  
  208.     private class klammer
  209.     {
  210.  
  211.         ArrayList<Tx> List;
  212.         public klammer()
  213.         {
  214.             List = new ArrayList<>();
  215.             finds();
  216.         }
  217.  
  218.         //region wayToW
  219.  
  220.         private void finds()
  221.         {
  222.             ArrayList<String> allo;
  223.             boolean find = false;
  224.             int start,end,acculut;
  225.             start = -1;
  226.             end = -1;
  227.             acculut = -1;
  228.             allo = new ArrayList<>();
  229.             for(char i : Aufgabe.toCharArray())
  230.             {
  231.                 String g = String.valueOf(i);
  232.                 switch (g) {
  233.                     case "(":
  234.                         allo = new ArrayList<>();
  235.                         allo.add(g);
  236.                         find = true;
  237.                         end++;
  238.                         start = end;
  239.                         acculut++;
  240.                         Log.d(TAG, String.valueOf("----------------------------"));
  241.                         Log.d(TAG, "Gefunden (");
  242.                         Log.d(TAG, String.valueOf("Start " + start));
  243.                         Log.d(TAG, String.valueOf("Ende " + end));
  244.                         Log.d(TAG, String.valueOf("Acculut " + acculut));
  245.                         Log.d(TAG, String.valueOf("----------------------------"));
  246.  
  247.                         break;
  248.                     case ")":
  249.                         end++;
  250.                         acculut--;
  251.                         allo.add(g);
  252.                         Log.d(TAG, String.valueOf("----------------------------"));
  253.                         Log.d(TAG, "Gefunden )");
  254.                         Log.d(TAG, String.valueOf("Ende " + end));
  255.                         Log.d(TAG, String.valueOf("Acculut " + acculut));
  256.                         Log.d(TAG, String.valueOf("----------------------------"));
  257.                         if (acculut == -1) {
  258.                             String a = "";
  259.                             for (String h : allo) {
  260.                                 a = String.valueOf(a + h);
  261.                             }
  262.                             Pattern p = Pattern.compile("(\\((.+)\\))");
  263.                             Matcher m = p.matcher(a);
  264.                             while (m.find()) {
  265.                                 String gesammt = m.group(1);
  266.                                 String InKlammer = m.group(2);
  267.                                 Log.d(TAG, String.valueOf("----------------------------"));
  268.                                 Log.d(TAG, "Klammer gesammt" + gesammt);
  269.                                 Log.d(TAG, "Klammer inklammer" + InKlammer);
  270.                                 Log.d(TAG, String.valueOf("----------------------------"));
  271.                                 List.add(new Tx(gesammt, InKlammer));
  272.                             }
  273.                             this.find();
  274.                         }
  275.                         break;
  276.                     default:
  277.                         end++;
  278.                         allo.add(g);
  279.                         Log.d(TAG, String.valueOf("----------------------------"));
  280.                         Log.d(TAG, "Gefunden " + g + "in default");
  281.                         Log.d(TAG, String.valueOf("Ende " + end));
  282.                         Log.d(TAG, String.valueOf("Acculut " + acculut));
  283.                         Log.d(TAG, String.valueOf("----------------------------"));
  284.                         break;
  285.  
  286.                 }
  287.             }
  288.         }
  289.  
  290.         //endregion
  291.  
  292.  
  293.         private void find()
  294.         {
  295.             for(Tx a : List)
  296.             {
  297.                 Log.d(TAG,String.valueOf("----------------------------"));
  298.                 Log.d(TAG,"InKlammer_find " + a.All);
  299.                 Log.d(TAG,"InKlammer_find " + a.In);
  300.                 Log.d(TAG,"InKlammer_find " + a.Ergebniss);
  301.                 Log.d(TAG,String.valueOf("----------------------------"));
  302.                 Aufgabe=Aufgabe.replace(a.All,a.Ergebniss);
  303.                 new klammer();
  304.                 return;
  305.             }
  306.         }
  307.         private class Tx
  308.         {
  309.             String All,In,Ergebniss;
  310.             public Tx(String All,String InKlammer)
  311.             {
  312.                 this.All = All;this.In = InKlammer;
  313.                 Log.d(TAG,"Starte regex von Klammer " + this.All);
  314.                 this.Ergebniss = new regex(ctx,InKlammer).get();
  315.             }
  316.         }
  317.     }
  318.  
  319.     private Double brechnung(String Zeichen,ArrayList<Double> Zahlen)
  320.     {
  321.         switch (Zeichen)
  322.         {
  323.             case "+": return (Zahlen.get(0) + Zahlen.get(1));
  324.             case "-": return (Zahlen.get(0) - Zahlen.get(1));
  325.             case "/": return (Zahlen.get(0) / Zahlen.get(1));
  326.             case "*": return (Zahlen.get(0) * Zahlen.get(1));
  327.             case "^": return Math.pow(Zahlen.get(0), Zahlen.get(1));
  328.         }
  329.         return 0d;
  330.     }
  331.  
  332.     private double StrgToDbl(String Input)
  333.     {
  334.         if(Input.equals("pi")){return PI;}
  335.         double aDbl = Double.parseDouble(Input);
  336.         return aDbl;
  337.     }
  338.  
  339.     private class rechnungen
  340.     {
  341.         public String Gesammt;
  342.         public ArrayList<Double> Zahlen;
  343.         public String Zeichen;
  344.         public position posi;
  345.  
  346.         public rechnungen(double ZahlOne,double ZahlTwo,String Zeichen, String Gesammt,int Start,int End)
  347.         {
  348.             Zahlen = new ArrayList<>();
  349.             Zahlen.add(ZahlOne);
  350.             Zahlen.add(ZahlTwo);
  351.             this.Gesammt = Gesammt;
  352.             this.Zeichen = Zeichen;
  353.             posi = new position(Start,End);
  354.         }
  355.  
  356.         public rechnungen(double ZahlOne,double ZahlTwo,String Zeichen, int Start)
  357.         {
  358.             Zahlen = new ArrayList<>();
  359.             Zahlen.add(ZahlOne);
  360.             Zahlen.add(ZahlTwo);
  361.  
  362.             this.Zeichen = Zeichen;
  363.             posi = new position(Start);
  364.         }
  365.  
  366.         private class position
  367.         {
  368.             public int x,xend;
  369.             public position(int x, int xend)
  370.             {
  371.                 this.x = x;
  372.                 this.xend = xend;
  373.             }
  374.             public position(int x)
  375.             {
  376.                 this.x = x;
  377.                 this.xend = -1;
  378.             }
  379.         }
  380.     }
  381. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement