public static List extractNumsFromStr(String line) {
List numbers = new ArrayList();
Long no;
String number = null;
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(line);
while (m.find()) {
number = m.group();
no = Long.parseLong(number);
numbers.add(no);
}
return numbers;
}
Wednesday, December 21, 2011
Extract Numbers from a String
Thursday, November 10, 2011
Convert XML file To String object
public static String convertXMLFileToString(String filePath) {
try {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
InputStream inputStream = new FileInputStream(new File(filePath));
org.w3c.dom.Document document = documentBuilderFactory.newDocumentBuilder().parse(inputStream);
StringWriter stwriter = new StringWriter();
Transformer serializer = TransformerFactory.newInstance().newTransformer();
serializer.transform(new DOMSource(document), new StreamResult(stwriter));
return stwriter.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Wednesday, September 28, 2011
MySql LOAD_FILE Function
LOAD_FILE(file_name_and_complete_path)
It’s built in MySql String function that reads a file from server host and returns the contents of file as string. If file can’t read or doesn’t exist then this function will return NULL.
Important Points:
- è Must pass the full path name to the file as parameter
- è User must have the FILE privilege
- è File must be readable
- è Size of file must be less than max_allowed_packet in bytes. Default is (1048576 bytes). Its range is 1024 – 1073741824
- è If system variable named secure_file_priv is set to a non empty directory, then the file must be located in the directory specified by this system variable. Its advisable to set this variable to the source directory for your file, otherwise there is a risk for LOAD_FILE Injection. If you want to check the current value for this system variable you can simply use the command:
Example:
Mysql> UPDATE
Friday, September 16, 2011
Java Puzzle Animal Farm
public class AnimalFarm {
public static void main(String[] args) {
final String pig = "length: 10";
final String dog = "length: " + pig.length();
System.out.println("Animals are equal: "+ pig == dog);
}
}
Solution:
A superficial analysis of the program might suggest that it should print Animals are equal: true. After all, pig and dog are both final String variables initialized to the character sequence "length: 10". In other words, the strings referred to by pig and dog are and will forever remain equal to each other. The == operator, however, does not test whether two objects are equal; it tests whether two object references are identical. In other words, it tests whether they refer to precisely the same object. In this case, they do not. You may be aware that compile-time constants of type String are interned [JLS 15.28]. In other words, any two constant expressions of type String that designate the same character sequence are represented by identical object references. If initialized with constant expressions, both pig and dog would indeed refer to the same object, but dog is not initialized with a constant expression. The language constrains which operations are permitted to appear in a constant expression [JLS 16.28], and method invocation is not among them. Therefore the program should print Animals are equal: false, right?
Well, no, actually. If you ran the program, you found that it prints false and nothing else. It doesn't print Animals are equal: . How could it not print this string literal, which is right there in black and white? The + operator, whether used for addition or string concatenation, binds more tightly than the == operator. Therefore, the parameter of the println method is evaluated like this:
System.out.println(("Animals are equal: " + pig) == dog);
The value of the boolean expression is, of course, false, and that is exactly what the program prints. There is one surefire way to avoid this sort of difficulty: When using the string concatenation operator, always parenthesize nontrivial operands. More generally, when you are not sure whether you need parentheses, err on the side of caution and include them. If you parenthesize the comparison in the println statement as follows, it will produce the expected output of Animals are equal: false:
System.out.println("Animals are equal: " + (pig == dog));
Arguably, the program is still broken. Your code should rarely, if ever, depend on the interning of string constants. Interning was designed solely to reduce the memory footprint of the virtual machine, not as a tool for programmers. As this puzzle demonstrates, it isn't always obvious which expressions will result in string constants. Worse, if your code depends on interning for its correct operation, you must carefully keep track of which fields and parameters must be interned. The compiler can't check these invariants for you, because interned and noninterned strings are represented by the same type (String). The bugs that result from the failure to intern a string are typically quite difficult to detect.
When comparing object references, you should use the equals method in preference to the == operator unless you need to compare object identity rather than value. Applying this lesson to our program, here is how the println statement should look. It is clear that the program prints True when it is fixed in this fashion:
System.out.println("Animals are equal: " + pig.equals(dog));
This puzzle has two lessons for language designers. The natural precedence of string concatenation might not be the same as that of addition. This implies that it is problematic to overload the + operator to perform string concatenation. Also, reference equality is more confusing than value equality for immutable types, such as String. Perhaps the == operator should perform value comparisons when applied to immutable reference types. One way to achieve this would be to make the == operator a shorthand for the equals method, and to provide a separate method to perform reference identity comparison, akin to System.identityHashCode.
Gang of Four (GOF) Design Patterns
The Gang of four (GOF) patterns are categorized into three main categories:
- Creational:- Deals with the creation of objects. Following are the creational patterns:
- Factory
- Abstract Factory
- Factory Method
- Builder
- Prototype
- Singleton
- Structural:- Deals with the relationships between portion of your application. Followings are the Structural patterns:
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
- Behavioural:- Deals with the state and behaviour flow through the system. Followings are the behavioural patterns:
- Chain of Responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Visitor
Thursday, September 15, 2011
New Features in Java version 7
- Strings in the Switch Statement
- Type Inference for Generic Instance Creation (diamond symbol <>)
http://download.oracle.com/javase/7/docs/technotes/guides/language/type-inference-generic-instance-creation.html
- The try-with-resources Statement
http://download.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html
- Catching multiple Exception Types and Rethrowing Exception with Improved Type Checking
http://download.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html
- Enhancements in Java I/O (new package named java.nio)
http://download.oracle.com/javase/7/docs/technotes/guides/io/enhancements.html#7
http://download.oracle.com/javase/tutorial/essential/io/notification.html
- Java Virtual Machine Support for Non-Java Languages
http://download.oracle.com/javase/7/docs/technotes/guides/vm/multiple-language-support.html
- JLayer Pane to Decorate Components with JLayer Class
http://download.oracle.com/javase/tutorial/uiswing/misc/jlayer.html
Wednesday, August 10, 2011
To Check Internet Explorer (IE) version
Little helper function to return details about IE 8 and its various compatibility settings either use as it is or incorporate into a browser object. Remember browser sniffing is not the best way to detect user-settings as spoofing is very common so use with caution.
function IEVersion(){
var _n=navigator,_w=window,_d=document;
var version="NA";
var na=_n.userAgent;
var ieDocMode="NA";
var ie8BrowserMode="NA";
// Look for msie and make sure its not opera in disguise
if(/msie/i.test(na) && (!_w.opera)){
// also check for spoofers by checking known IE objects
if(_w.attachEvent && _w.ActiveXObject){
// Get version displayed in UA although if its IE 8 running in 7 or compat mode it will appear as 7
version = (na.match( /.+ie\s([\d.]+)/i ) || [])[1];
// Its IE 8 pretending to be IE 7 or in compat mode
if(parseInt(version)==7){
// documentMode is only supported in IE 8 so we know if its here its really IE 8
if(_d.documentMode){
version = 8; //reset? change if you need to
// IE in Compat mode will mention Trident in the useragent
if(/trident\/\d/i.test(na)){
ie8BrowserMode = "Compat Mode";
// if it doesn't then its running in IE 7 mode
}else{
ie8BrowserMode = "IE 7 Mode";
}
}
}else if(parseInt(version)==8){
// IE 8 will always have documentMode available
if(_d.documentMode){ ie8BrowserMode = "IE 8 Mode";}
}
// If we are in IE 8 (any mode) or previous versions of IE we check for the documentMode or compatMode for pre 8 versions
ieDocMode = (_d.documentMode) ? _d.documentMode : (_d.compatMode && _d.compatMode=="CSS1Compat") ? 7 : 5;//default to quirks mode IE5
}
}
return {
"UserAgent" : na,
"Version" : version,
"BrowserMode" : ie8BrowserMode,
"DocMode": ieDocMode
}
}
var ieVersion = IEVersion();
var IsIE8 = ieVersion.Version != "NA" && ieVersion.Version >= 8;
if (!IsIE8) {
alert("Please upgrade to Internet Explorer 8 or better!" ) ;
}
Wednesday, July 13, 2011
Masking a HTML TextField as Numeric or Float
Add these functions to your JavaScript code under <script> tag.
function getKey(evt) { // works for IE, Netscape, Firefox, Opera, Chrome
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
return key;
}
function MaskNumeric(evt) {
//8 Delete, 39 left cursor, 37 right cursor, 35 end, 36 home, 9 tab, 116 f5
//127 Backspace 48-57 0-9
var key = getKey(evt);
if( (key == 116 || key == 8 || key == 9 || key == 39 || key == 37 || key == 35 ||
key == 36 || key == 189 || key == 109 || key == 127 || key == 46) ||
(key >= 48 && key <= 57) ||
(key >= 96 && key <= 105) ) {
return true;
} else {
return false;
}
}
function MaskFloat(evt) {
//8 Delete, 39 left cursor, 37 right cursor, 35 end, 36 home, 9 tab, 116 f5
//127 Backspace 48-57 0-9
var key = getKey(evt);
if( (key == 116 || key == 8 || key == 9 || key == 39 || key == 37 || key == 35 ||
key == 36 || key == 189 || key == 109 || key == 127 || key == 46 || key == 110 || key == 190) ||
(key >= 48 && key <= 57) ||
(key >= 96 && key <= 105) ) {
return true;
} else {
return false;
}
}
Then use the following code in your HTML form.
For Numeric Masked Field:
<input type="text" onkeypress="return MaskNumeric(event);" />
For Float Masked Field.
<input type="text" onkeypress="return MaskNumeric(event);" />
Wednesday, February 16, 2011
Passing Variable No of Arguments to Oracle Stored Procedure
If you want to pass variable number of arguments in a Oracle stored procedure, you can use array Type as stored procedure's parameter to accomplish this. Like in Java you can pass varargs as an array.
1- Create an Oracle nested table type in the database
CREATE OR REPLACE TYPE nt_type IS TABLE OF VARCHAR2(30);
2- Create a procedure in the database
CREATE OR REPLACE PROCEDURE nt_proc (nt nt_type) IS
i NUMBER;
BEGIN
FOR i IN nt.FIRST .. nt.LAST
LOOP
INSERT INTO nt_test(id, description) VALUES (i, nt(i));
END LOOP;
END nt_proc;
/
3- Create a test table, This is just for test purposes.
CREATE TABLE nt_test (id NUMBER, description VARCHAR2(30));
4- Create a module which defines the array of values
DECLARE
nt nt_type := nt_type(); -- nested table variable initialized to empty
BEGIN
nt := nt_type('Chester','Swindon','Corby','London','Swansea','Cardiff'); -- create your string of variables here
nt_proc(nt);
END;
/
SELECT * FROM nt_test;
Monday, February 14, 2011
Renaming Foreign Keys
There is an Oracle DDL command which will rename a Foreign Key constraint:
SQL>ALTER TABLE <tablename> RENAME CONSTRAINT <foreign_key> TO <foreign_key_new_name>;
eg
SQL>ALTER TABLE emp RENAME CONSTRAINT SYS_C0017017 TO FK_EMP_DEPT;
I have written an Oracle stored procedure which shows how this can be done:
1)
CREATE OR REPLACE PROCEDURE rename_foreign_key(p_table_name IN VARCHAR2, p_foreign_key IN VARCHAR2, p_foreign_key_new VARCHAR2)
IS
l_action VARCHAR2(2000) := NULL;
CURSOR c_uc(p_table_name VARCHAR2, p_fk VARCHAR2, p_fk_new VARCHAR2)
IS
SELECT 'ALTER TABLE ' || uc.table_name || ' RENAME CONSTRAINT ' || uc.constraint_name || ' TO ' || p_fk_new
FROM user_constraints uc
WHERE uc.table_name = p_table_name
AND uc.constraint_name = p_fk
AND uc.constraint_type = 'R';
BEGIN NULL;
OPEN c_uc(p_table_name, p_foreign_key, p_foreign_key_new);
FETCH c_uc INTO l_action;
CLOSE c_uc;
EXECUTE IMMEDIATE l_action;
END;
/
2) Example: create a master table DEPT and a child table EMP
CREATE TABLE dept (
deptno NUMBER(4) PRIMARY KEY,
dname VARCHAR2(14),
loc VARCHAR2(13));
CREATE TABLE emp (
empno NUMBER(4) PRIMARY KEY,
ename VARCHAR2(10),
deptno NUMBER(2),
FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO));
3) Find the generated name for the foreign key in the EMP table
SELECT constraint_name FROM user_constraints WHERE table_name = 'EMP' AND constraint_type = 'R' AND generated = 'GENERATED NAME';
--> SYS_C0017017
4) Rename SYS_C0017017 to FK_EMP_DEPT
SQL> EXEC rename_foreign_key('EMP','SYS_C0017017','FK_EMP_DEPT')