split() public static method

public static split ( string self ) : List
self string
return List
Example #1
0
        /**
         * Parse an dimension string and intern it:
         *   dim    := <ratio> ["*" <ratio>]*
         *   ratio  := <base> <exp>
         *   base   := "kg" | "m" | "sec" | "K" | "A" | "mol" | "cd"
         */
        private static Dimension parseDim(string s)
        {
            // handle empty string as dimensionless
            if (s.Length == 0)
            {
                return(m_dimensionless);
            }

            // parse dimension
            Dimension dim    = new Dimension();
            List      ratios = FanStr.split(s, Long.valueOf((long)'*'), true);

            for (int i = 0; i < ratios.sz(); ++i)
            {
                string r = (string)ratios.get(i);
                if (r.StartsWith("kg"))
                {
                    dim.kg = SByte.Parse(r.Substring(2).Trim()); continue;
                }
                if (r.StartsWith("sec"))
                {
                    dim.sec = SByte.Parse(r.Substring(3).Trim()); continue;
                }
                if (r.StartsWith("mol"))
                {
                    dim.mol = SByte.Parse(r.Substring(3).Trim()); continue;
                }
                if (r.StartsWith("m"))
                {
                    dim.m = SByte.Parse(r.Substring(1).Trim()); continue;
                }
                if (r.StartsWith("K"))
                {
                    dim.K = SByte.Parse(r.Substring(1).Trim()); continue;
                }
                if (r.StartsWith("A"))
                {
                    dim.A = SByte.Parse(r.Substring(1).Trim()); continue;
                }
                if (r.StartsWith("cd"))
                {
                    dim.cd = SByte.Parse(r.Substring(2).Trim()); continue;
                }
                throw new Exception("Bad ratio '" + r + "'");
            }

            // intern
            return(dim.intern());
        }
Example #2
0
        /**
         * Parse an un-interned unit:
         *   unit := <name> [";" <symbol> [";" <dim> [";" <scale> [";" <offset>]]]]
         */
        private static Unit parseUnit(string s)
        {
            string idStrs = s;
            int    c      = s.IndexOf(';');

            if (c > 0)
            {
                idStrs = s.Substring(0, c);
            }
            List ids = FanStr.split(idStrs, Long.valueOf(','));

            if (c < 0)
            {
                return(new Unit(ids, m_dimensionless, 1, 0));
            }

            string dim = s = s.Substring(c + 1).Trim();

            c = s.IndexOf(';');
            if (c < 0)
            {
                return(new Unit(ids, parseDim(dim), 1, 0));
            }

            dim = s.Substring(0, c).Trim();
            string scale = s = s.Substring(c + 1).Trim();

            c = s.IndexOf(';');
            if (c < 0)
            {
                return(new Unit(ids, parseDim(dim), Double.parseDouble(scale), 0));
            }

            scale = s.Substring(0, c).Trim();
            string offset = s.Substring(c + 1).Trim();

            return(new Unit(ids, parseDim(dim), Double.parseDouble(scale), Double.parseDouble(offset)));
        }