пятница, 20 января 2012 г.

Нечувствительный регистр для типа HashSet

Постановка задачи:
Нечувствительный регистр для типа HashSet

Допустим вам необходимо сделать так что бы в HashSet добавлялись элементы не обращая внимания на регистр. Я предлагаю сделать это одним из двух способов:


Решение:

Использовать TreeSet

Результат:

Упорядоченная коллекция TreeSet (так как TreeSet автоматически упорядочивает    
        помещаемые в него данные)

Java Код:

Set<String> set = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
String s1 = "TO";
String s2 = "to";
set.add(s1);
set.add(s2);
System.out.println(set.toString());

/////////////////////////////////////////////////////////////
Решение:

Использовать LinkedHashMap

Результат:

Коллекция с элементами в порядке добавления.

Java код:

Map<String, String> map = new LinkedHashMap<String, String>();
String s1 = "TO DO";
String s2 = "To do";
map.put(s1.toUpperCase(), s2);
map.put(s2.toUpperCase(), s2);
for (Map.Entry<String, String> entry : map.entrySet()){
System.out.println("key = " + entry.getKey());
System.out.println("value = " + entry.getValue());
}

Case insensitive to HashSet

Problem:
Case insensitive to HashSet

     You need to that the HashSet add elements without case insensitive. This can be completed in two ways:

1. First solution:

     Use TreeSet

Result:

      Sokrted collection TreeSet (since TreeSet automatically sorts the elements)

Java code:

     Set set = new TreeSet(String.CASE_INSENSITIVE_ORDER);
     String s1 = "TO";
     String s2 = "to";
     set.add(s1);
     set.add(s2);
     System.out.println(set.toString());

/////////////////////////////////////////////////////////////
2. Second solution:
     Use LinkedHashMap

Result:

     Collection with elements as they was added

Java code:

     Map map = new LinkedHashMap();
     String s1 = "TO DO";
     String s2 = "To do";
     map.put(s1.toUpperCase(), s2);
     map.put(s2.toUpperCase(), s2);
     for (Map.Entry entry : map.entrySet()){
     System.out.println("key = " + entry.getKey());
     System.out.println("value = " + entry.getValue());
      }

среда, 4 января 2012 г.

Как узнать путь к текущему java классу

Как узнать путь к текущему классу java.


String path = new File(".").getCanonicalPath();
System.out.println(path);

или

String path = System.getProperty("user.dir");
System.out.println(path);


Connecting to oracle


Java Connecting to Oracle:
You must import jdbc jar file to you project and make to this link from classpath file.

Java Соединение с БД Oracle
Если  вы хотите создать соединение к базе данных Oracle, то вам необходимо скачать jar файл - драйвер для Oracle, импортировать в свой проект этот драйвер, и прописать его в файле classpath.

Регулярные выражения java api / regular expressions java api

Регулярные выражения в java.
1. Замена одного или нескольких сиволов или цифр.
. - один любой символ.
.* - любой символ повторяется сколько угодно раз.
\\(любой символ) - два слеша в java используются для указания какой сивол нужно искать, т.е. после двух обратных слешов вы указываете определнный символ, и поиск будет выполнен по этому сивмволу. В java  некоторые буквы, определены как класс некоторых символов, например:
\\d - любая цифра (0-9)
\\d* - любая цифра повторяется ноль или несколько раз
\\w - люая буква
\\w+ - любая буква повторяется один или несколько раз
\\* - будет искаться символ звездочки
\\? - будет искаться символ знака вопроса
Пример:
Если у вас есть часть строки, и вторую часть вам нужно задать любыми 
символами, то просто создайте строку String с известной частью строки а 
неизвестные буквы замените точкой:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Testing {
    public static void main(String[] args) {
        String pattern = "......metal";
         String[] array = new String[4];
        array[0] = "heavy metal";        //подходит
        array[1] = "dark metal";        //не подходит
        array[2] = "death metal";        //подходит
        array[3] = "progressive metal";    //не подходит
        Pattern p = Pattern.compile(pattern) ;
        Matcher m;
        for (int i = 0; i < array.length; i++) {
            m = p.matcher(array[i]) ;
            System.out.println(array[i] + " = "+ m.matches()) ;
        }
    }
}
Программа выведет:
heavy metal = true
dark metal = false
death metal = true
progressive metal = false

2. Динамичкое формирование регулярного выражения.
Если вы хотите формировать строку для регулярного выражения динамически, то:
Пример:
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Testing {
    public static void main(String[] args) {       
        String symbol_1 = "*";
        String symbol_2 = "?";
        String symbol_3 = "\\";
        String symbol_4 = "|";
        //формируем кодом строку "\\*|\\?", данная строка будет означать что необходимо искать символ звуздочки "*" или символ знака вопроса "?".
        // Два символа обратного слеша в java  используются для указания какой сивол нужно искать, т.е. после двух обратных слешов вы              
        // указываете определнный символ, и поиск будет выполнен по этому сивмволу.
        String pattern = symbol_3 + symbol_1 + symbol_4 + symbol_3 + symbol_2;
        System.out.println(pattern) ;
        String s = "?go*do**that*";       
        Pattern p = Pattern.compile(pattern) ; 
        String[] array = p.split(s) ;
        System.out.println(Arrays.deepToString(array)) ;       
    }
}