Showing posts with label string. Show all posts
Showing posts with label string. Show all posts

Thursday, June 4, 2015

Java Implementation of String Next Sequence


package time.zone;

import java.util.ArrayList;
import java.util.List;

public class JavaNextCharacter {
    public static void main (String[] args) throws Exception {
        List<String> codes = new ArrayList<String>();
        long started = System.currentTimeMillis();
        String s1 = "IjKl", s2 = "P.R.I.T.O.M", s3 = "{AB374}", s4 = "{ZZ}{U8U}", s5 = "Tp9";
        for (int i = 0; i < 20000; i++) {            
            System.out.println(formatAsLength(("#" + (i + 1)), 10) + 
                    formatAsLength(s1, 7) + " " + 
                    formatAsLength(s2, 12) + " " + 
                    formatAsLength(s3, 10) + " " + 
                    formatAsLength(s4, 12) + " " + 
                    formatAsLength(s5, 10));
            
            if (codes.contains(s1)) {
                throw new Exception("Duplicate code#1: " + s1 + " after generating " + codes.size() + " codes");
            }
            else if (codes.contains(s2)) {
                throw new Exception("Duplicate code#2: " + s2 + " after generating " + codes.size() + " codes");
            }
            else if (codes.contains(s3)) {
                throw new Exception("Duplicate code#3: " + s3 + " after generating " + codes.size() + " codes");
            }
            else if (codes.contains(s4)) {
                throw new Exception("Duplicate code#4: " + s4 + " after generating " + codes.size() + " codes");
            }
            else if (codes.contains(s5)) {
                throw new Exception("Duplicate code#5: " + s5 + " after generating " + codes.size() + " codes");
            }
            
            codes.add(s1);
            codes.add(s2);
            codes.add(s3);
            codes.add(s4);
            codes.add(s5);
            
            s1 = next(s1);
            s2 = next(s2);
            s3 = next(s3);
            s4 = next(s4);
            s5 = next(s5);
        }
        System.out.println("Total time taken: " + (System.currentTimeMillis() - started) + " milli to generate"
                + " " + codes.size() + " codes");
    }
 
    public static String next(String text) {
        int len = text.length();
        if (len == 0) {
            return text;
        }
        boolean alphaNum = false;
        int alphaNumPos = -1;
        for (char c : text.toCharArray()) {
            alphaNumPos++;
            if (Character.isDigit(c) || Character.isLetter(c)) {
                alphaNum = true;
                break;
            }
        }
        StringBuilder buf = new StringBuilder(text);
        if (!alphaNum || alphaNumPos == 0 || alphaNumPos == len) {
            next(buf, buf.length() - 1, alphaNum);
        }
        else {
            String prefix = text.substring(0, alphaNumPos);
            buf = new StringBuilder(text.substring(alphaNumPos));
            next(buf, buf.length() - 1, alphaNum);
            buf.insert(0, prefix);
        }
        return buf.toString();
    }
 
    private static void next(StringBuilder buf, int pos, boolean alphaNum) {
        if (pos == -1) {
            char c = buf.charAt(0);
            String rep = null;
            if (Character.isDigit(c))
                rep = "1";
            else if (Character.isLowerCase(c))
                rep = "a";
            else if (Character.isUpperCase(c))
                rep = "A";
            else
                rep = Character.toString((char) (c + 1));
            buf.insert(0, rep);
            return;
        }

        char c = buf.charAt(pos);
        if (Character.isDigit(c)) {
            if (c == '9') {
                buf.replace(pos, pos + 1, "0");
                next(buf, pos - 1, alphaNum);
            } 
            else {
                buf.replace(pos, pos + 1, Character.toString((char)(c + 1)));
            }
        }
        else if (Character.isLowerCase(c)) {
            if (c == 'z') {
                buf.replace(pos, pos + 1, "a");
                next(buf, pos - 1, alphaNum);
            } 
            else {
                buf.replace(pos, pos + 1, Character.toString((char)(c + 1)));
            }
        } 
        else if (Character.isUpperCase(c)) {
            if (c == 'Z') {
                buf.replace(pos, pos + 1, "A");
                next(buf, pos - 1, alphaNum);
            } 
            else {
                buf.replace(pos, pos + 1, Character.toString((char)(c + 1)));
            }
        } 
        else {
            if (alphaNum) {
                next(buf, pos - 1, alphaNum);
            } 
            else {
                if (c == Character.MAX_VALUE) {
                    buf.replace(pos, pos + 1, Character.toString(Character.MIN_VALUE));
                    next(buf, pos - 1, alphaNum);
                } 
                else {
                    buf.replace(pos, pos + 1, Character.toString((char)(c + 1)));
                }
            }
        }
    }
    
    public static String formatAsLength(String text, Integer minLength) {
        return String.format("%-" + minLength + "s", text);
    }
}



#1        IjKl    P.R.I.T.O.M  {AB374}    {ZZ}{U8U}    Tp9       
#2        IjKm    P.R.I.T.O.N  {AB375}    {ZZ}{U8V}    Tq0       
#3        IjKn    P.R.I.T.O.O  {AB376}    {ZZ}{U8W}    Tq1       
#4        IjKo    P.R.I.T.O.P  {AB377}    {ZZ}{U8X}    Tq2       
#5        IjKp    P.R.I.T.O.Q  {AB378}    {ZZ}{U8Y}    Tq3       
#6        IjKq    P.R.I.T.O.R  {AB379}    {ZZ}{U8Z}    Tq4       
#7        IjKr    P.R.I.T.O.S  {AB380}    {ZZ}{U9A}    Tq5       
#8        IjKs    P.R.I.T.O.T  {AB381}    {ZZ}{U9B}    Tq6       
#9        IjKt    P.R.I.T.O.U  {AB382}    {ZZ}{U9C}    Tq7       
#10       IjKu    P.R.I.T.O.V  {AB383}    {ZZ}{U9D}    Tq8       
#11       IjKv    P.R.I.T.O.W  {AB384}    {ZZ}{U9E}    Tq9       
#12       IjKw    P.R.I.T.O.X  {AB385}    {ZZ}{U9F}    Tr0       
#13       IjKx    P.R.I.T.O.Y  {AB386}    {ZZ}{U9G}    Tr1       
..................................
#19918    JmWm    P.R.J.X.A.N  {AV291}    {AAC}{T4V}   CSf6      
#19919    JmWn    P.R.J.X.A.O  {AV292}    {AAC}{T4W}   CSf7      
#19920    JmWo    P.R.J.X.A.P  {AV293}    {AAC}{T4X}   CSf8      
#19921    JmWp    P.R.J.X.A.Q  {AV294}    {AAC}{T4Y}   CSf9      
#19922    JmWq    P.R.J.X.A.R  {AV295}    {AAC}{T4Z}   CSg0      
#19923    JmWr    P.R.J.X.A.S  {AV296}    {AAC}{T5A}   CSg1      
#19924    JmWs    P.R.J.X.A.T  {AV297}    {AAC}{T5B}   CSg2      
#19925    JmWt    P.R.J.X.A.U  {AV298}    {AAC}{T5C}   CSg3      
#19926    JmWu    P.R.J.X.A.V  {AV299}    {AAC}{T5D}   CSg4      
#19927    JmWv    P.R.J.X.A.W  {AV300}    {AAC}{T5E}   CSg5      
#19928    JmWw    P.R.J.X.A.X  {AV301}    {AAC}{T5F}   CSg6      
#19929    JmWx    P.R.J.X.A.Y  {AV302}    {AAC}{T5G}   CSg7      
#19930    JmWy    P.R.J.X.A.Z  {AV303}    {AAC}{T5H}   CSg8      
#19931    JmWz    P.R.J.X.B.A  {AV304}    {AAC}{T5I}   CSg9      
#19932    JmXa    P.R.J.X.B.B  {AV305}    {AAC}{T5J}   CSh0      
#19933    JmXb    P.R.J.X.B.C  {AV306}    {AAC}{T5K}   CSh1      
#19934    JmXc    P.R.J.X.B.D  {AV307}    {AAC}{T5L}   CSh2      
#19935    JmXd    P.R.J.X.B.E  {AV308}    {AAC}{T5M}   CSh3      
#19936    JmXe    P.R.J.X.B.F  {AV309}    {AAC}{T5N}   CSh4      
#19937    JmXf    P.R.J.X.B.G  {AV310}    {AAC}{T5O}   CSh5      
#19938    JmXg    P.R.J.X.B.H  {AV311}    {AAC}{T5P}   CSh6      
#19939    JmXh    P.R.J.X.B.I  {AV312}    {AAC}{T5Q}   CSh7      
#19940    JmXi    P.R.J.X.B.J  {AV313}    {AAC}{T5R}   CSh8      
#19941    JmXj    P.R.J.X.B.K  {AV314}    {AAC}{T5S}   CSh9      
#19942    JmXk    P.R.J.X.B.L  {AV315}    {AAC}{T5T}   CSi0      
#19943    JmXl    P.R.J.X.B.M  {AV316}    {AAC}{T5U}   CSi1      
#19944    JmXm    P.R.J.X.B.N  {AV317}    {AAC}{T5V}   CSi2      
#19945    JmXn    P.R.J.X.B.O  {AV318}    {AAC}{T5W}   CSi3      
#19946    JmXo    P.R.J.X.B.P  {AV319}    {AAC}{T5X}   CSi4      
#19947    JmXp    P.R.J.X.B.Q  {AV320}    {AAC}{T5Y}   CSi5      
#19948    JmXq    P.R.J.X.B.R  {AV321}    {AAC}{T5Z}   CSi6      
#19949    JmXr    P.R.J.X.B.S  {AV322}    {AAC}{T6A}   CSi7      
#19950    JmXs    P.R.J.X.B.T  {AV323}    {AAC}{T6B}   CSi8      
#19951    JmXt    P.R.J.X.B.U  {AV324}    {AAC}{T6C}   CSi9      
#19952    JmXu    P.R.J.X.B.V  {AV325}    {AAC}{T6D}   CSj0      
#19953    JmXv    P.R.J.X.B.W  {AV326}    {AAC}{T6E}   CSj1      
#19954    JmXw    P.R.J.X.B.X  {AV327}    {AAC}{T6F}   CSj2      
#19955    JmXx    P.R.J.X.B.Y  {AV328}    {AAC}{T6G}   CSj3      
#19956    JmXy    P.R.J.X.B.Z  {AV329}    {AAC}{T6H}   CSj4      
#19957    JmXz    P.R.J.X.C.A  {AV330}    {AAC}{T6I}   CSj5      
#19958    JmYa    P.R.J.X.C.B  {AV331}    {AAC}{T6J}   CSj6      
#19959    JmYb    P.R.J.X.C.C  {AV332}    {AAC}{T6K}   CSj7      
#19960    JmYc    P.R.J.X.C.D  {AV333}    {AAC}{T6L}   CSj8      
#19961    JmYd    P.R.J.X.C.E  {AV334}    {AAC}{T6M}   CSj9      
#19962    JmYe    P.R.J.X.C.F  {AV335}    {AAC}{T6N}   CSk0      
#19963    JmYf    P.R.J.X.C.G  {AV336}    {AAC}{T6O}   CSk1      
#19964    JmYg    P.R.J.X.C.H  {AV337}    {AAC}{T6P}   CSk2      
#19965    JmYh    P.R.J.X.C.I  {AV338}    {AAC}{T6Q}   CSk3      
#19966    JmYi    P.R.J.X.C.J  {AV339}    {AAC}{T6R}   CSk4      
#19967    JmYj    P.R.J.X.C.K  {AV340}    {AAC}{T6S}   CSk5      
#19968    JmYk    P.R.J.X.C.L  {AV341}    {AAC}{T6T}   CSk6      
#19969    JmYl    P.R.J.X.C.M  {AV342}    {AAC}{T6U}   CSk7      
#19970    JmYm    P.R.J.X.C.N  {AV343}    {AAC}{T6V}   CSk8      
#19971    JmYn    P.R.J.X.C.O  {AV344}    {AAC}{T6W}   CSk9      
#19972    JmYo    P.R.J.X.C.P  {AV345}    {AAC}{T6X}   CSl0      
#19973    JmYp    P.R.J.X.C.Q  {AV346}    {AAC}{T6Y}   CSl1      
#19974    JmYq    P.R.J.X.C.R  {AV347}    {AAC}{T6Z}   CSl2      
#19975    JmYr    P.R.J.X.C.S  {AV348}    {AAC}{T7A}   CSl3      
#19976    JmYs    P.R.J.X.C.T  {AV349}    {AAC}{T7B}   CSl4      
#19977    JmYt    P.R.J.X.C.U  {AV350}    {AAC}{T7C}   CSl5      
#19978    JmYu    P.R.J.X.C.V  {AV351}    {AAC}{T7D}   CSl6      
#19979    JmYv    P.R.J.X.C.W  {AV352}    {AAC}{T7E}   CSl7      
#19980    JmYw    P.R.J.X.C.X  {AV353}    {AAC}{T7F}   CSl8      
#19981    JmYx    P.R.J.X.C.Y  {AV354}    {AAC}{T7G}   CSl9      
#19982    JmYy    P.R.J.X.C.Z  {AV355}    {AAC}{T7H}   CSm0      
#19983    JmYz    P.R.J.X.D.A  {AV356}    {AAC}{T7I}   CSm1      
#19984    JmZa    P.R.J.X.D.B  {AV357}    {AAC}{T7J}   CSm2      
#19985    JmZb    P.R.J.X.D.C  {AV358}    {AAC}{T7K}   CSm3      
#19986    JmZc    P.R.J.X.D.D  {AV359}    {AAC}{T7L}   CSm4      
#19987    JmZd    P.R.J.X.D.E  {AV360}    {AAC}{T7M}   CSm5      
#19988    JmZe    P.R.J.X.D.F  {AV361}    {AAC}{T7N}   CSm6      
#19989    JmZf    P.R.J.X.D.G  {AV362}    {AAC}{T7O}   CSm7      
#19990    JmZg    P.R.J.X.D.H  {AV363}    {AAC}{T7P}   CSm8      
#19991    JmZh    P.R.J.X.D.I  {AV364}    {AAC}{T7Q}   CSm9      
#19992    JmZi    P.R.J.X.D.J  {AV365}    {AAC}{T7R}   CSn0      
#19993    JmZj    P.R.J.X.D.K  {AV366}    {AAC}{T7S}   CSn1      
#19994    JmZk    P.R.J.X.D.L  {AV367}    {AAC}{T7T}   CSn2      
#19995    JmZl    P.R.J.X.D.M  {AV368}    {AAC}{T7U}   CSn3      
#19996    JmZm    P.R.J.X.D.N  {AV369}    {AAC}{T7V}   CSn4      
#19997    JmZn    P.R.J.X.D.O  {AV370}    {AAC}{T7W}   CSn5      
#19998    JmZo    P.R.J.X.D.P  {AV371}    {AAC}{T7X}   CSn6      
#19999    JmZp    P.R.J.X.D.Q  {AV372}    {AAC}{T7Y}   CSn7      
#20000    JmZq    P.R.J.X.D.R  {AV373}    {AAC}{T7Z}   CSn8      
Total time taken: 74740 milli to generate 100000 codes

Wednesday, September 18, 2013

Java - String/Regex matches() for Starts With/Ends With/Contains Check

Parameter:

regex -- the regular expression to which this string is to be matched.

Return Value:

This method returns true if, and only if, this string matches the given regular expression. 

Example:


public class TestRegex {
    public static void main(String args[]){
        String Str = new String("Welcome to pritomkumar.blogspot.com");

        System.out.print("Contains 'pritom': " );
        System.out.println(Str.matches("(.*)pritom(.*)"));

        System.out.print("Starts with 'Welcome': " );
        System.out.println(Str.matches("Welcome(.*)"));

        System.out.print("Ends with '.com': " );
        System.out.println(Str.matches("(.*).com"));

        System.out.print("Starts with small characters: " );
        System.out.println(Str.matches("[a-z](.*)"));

        System.out.print("Starts with cap characters: " );
        System.out.println(Str.matches("[A-Z](.*)"));

        System.out.print("Starts with digits: " );
        System.out.println(Str.matches("[0-9](.*)"));
    }
} 
 

OUTPUT:

Contains 'pritom': true
Starts with 'Welcome': true
Ends with '.com': true
Starts with small characters: false
Starts with cap characters: true
Starts with digits: false 
 
Table 1.  Common matching symbols

Regular ExpressionDescription
.Matches any character
^regexregex must match at the beginning of the line
regex$Finds regex must match at the end of the line
[abc]Set definition, can match the letter a or b or c
[abc][vz]Set definition, can match a or b or c followed by either v or z
[^abc]When a "^" appears as the first character inside [] when it negates the pattern. This can match any character except a or b or c
[a-d1-7]Ranges, letter between a and d and figures from 1 to 7, will not match d1
X|ZFinds X or Z
XZFinds X directly followed by Z
$Checks if a line end follows


Table 2:  Meta-characters
Regular ExpressionDescription
\dAny digit, short for [0-9]
\DA non-digit, short for [^0-9]
\sA whitespace character, short for [ \t\n\x0b\r\f]
\SA non-whitespace character, for short for [^\s]
\wA word character, short for [a-zA-Z_0-9]
\WA non-word character [^\w]
\S+Several non-whitespace characters
\bMatches a word boundary. A word character is [a-zA-Z0-9_] and \b matches its bounderies.
Table 3: Quantifier
Regular ExpressionDescriptionExamples
*Occurs zero or more times, is short for {0,}X* - Finds no or several letter X, .* - any character sequence
+Occurs one or more times, is short for {1,}X+ - Finds one or several letter X
?Occurs no or one times, ? is short for {0,1}X? -Finds no or exactly one letter X
{X}Occurs X number of times, {} describes the order of the preceding liberal\d{3} - Three digits, .{10} - any character sequence of length 10
{X,Y}Occurs between X and Y times,\d{1,4}- \d must occur at least once and at a maximum of four
*?? after a quantifier makes it a reluctant quantifier, it tries to find the smallest match.

Wednesday, September 11, 2013

Convert A String (like testing123) To Binary In Java

The usual way is to use String#getBytes() to get the underlying bytes and then present those bytes in some other form (hex, binary whatever).
Note that getBytes() uses the default charset, so if you want the string converted to some specific character encoding, you should use getBytes(String encoding) instead, but many times (esp when dealing with ASCII) getBytes() is enough (and has the advantage of not throwing a checked exception).
For specific conversion to binary, here is an example:
  String s = "foo";
  byte[] bytes = s.getBytes();
  StringBuilder binary = new StringBuilder();
  for (byte b : bytes) {
     int val = b;
     for (int i = 0; i < 8; i++)
     {
        binary.append((val & 128) == 0 ? 0 : 1);
        val <<= 1;
     }
     binary.append(' ');
  }
  System.out.println("'" + s + "' to binary: " + binary);
Running this example will yield:
'foo' to binary: 01100110 01101111 01101111
http://stackoverflow.com/questions/917163/convert-a-string-like-testing123-to-binary-in-java

Wednesday, September 4, 2013

MySql cast or convert data(integer, float, double, decimal, date, etc...) as character/string

Fiddle link

You will need to cast or convert as a CHAR datatype, there is no varchar datatype that you can cast/convert data to:
select CAST(id as CHAR(50)) as col1 from t9;

select CONVERT(id, CHAR(50)) as colI1 from t9;
select CAST(amount AS DECIMAL(10, 2)) AS amount FROM t9;