Поиск по этому блогу

среда, 20 мая 2015 г.

Как удалить все пробелы у всех элементов массива


Исходная строка с пробелами
String [] array = {" Beer", "Old Whiskey "," Vodka "}
for (int i = 0; i < array.length; i++)
    array[i] = array[i].trim();

Рузультат
{"Beer", "Old Whiskey", "Vodka"}

Java Core. Ключевое слово transient

Ключевое слово transient предназначено для того, чтобы обозначить, что поле, перед которым написано это слово, не будет сериализовано.
class DeviceInfo implements Serializable{
    private String name;
    private transient String description;
    private String article;
 
...
}

Для того чтобы понимать назначение слова transient необходимо понимать, что такое сериализация и зачем она нужна.

Что такое сериализация


Сериализация - это процесс, при котором состояние объекта становится постоянным (persistent state), то есть процесс сохранения состояния объекта в какое либо хранилище, например, в базу данных. Это означает, что состояние объекта преобразуется в поток байтов и хранится в файле. Таким же образом мы можем использовать десериализацию - вернуть состояние объекта из потока байтов. Это одно из важнейших понятий в Java программировании, потому что сериализация широко используется в web-программировании. Объекты, которые должны быть переданы через сеть должны быть преобразованы в байты. Для этой цели каждый класс или интерфейс должны реализовывать интерфейс Serializable. Это интерфейс-маркер без каких-либо методов.

Зачем это нужно и когда использовать


По умолчанию, все переменные объекта преобразуются в постоянное состояние (persistent state). В некоторых случаях, вы можете хотеть не сохранять некоторые переменные, потому что нет необходимости сохранять эти переменные. Таким образом, вы можете объявить эти переменные как transient. Если переменная объявлена как transient, то она не будет сохранена. Это и есть основная цель ключевого слова transient.

Пример использования


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
 
class DeviceInfo implements Serializable {
    private String name;
    private transient String description;
    private String article;
 
    public DeviceInfo(String name, String description, String article) {
      this.name = name;
      this.description = description;
      this.article = article;
    }
 
    @Override
    public String toString() {
      StringBuffer sb = new StringBuffer(40);
      sb.append("Name : ");
      sb.append(this.name + "\n");
      sb.append("Description : ");
      sb.append(this.description + "\n");
      sb.append("Article : ");
      sb.append(this.article + "\n");
      return sb.toString();
    }
}
 
public class TransientTest {
 
    public static void main(String[] args) throws Exception {
      // создаем объект
      DeviceInfo deviceInfo = new DeviceInfo("Iphone 6", "Very luxury device", "A1644");
 
      // сериализуем объект
      ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("store"));
      o.writeObject(deviceInfo);
      o.close();
 
      // десериализуем объект
      ObjectInputStream in = new ObjectInputStream(new FileInputStream("store"));
      DeviceInfo deviceInfo1 = (DeviceInfo) in.readObject();
      System.out.println(deviceInfo1);
 
    }
 
}

Результат

Name : Iphone 6
Description : null
Article : A1644

Поле description объявлено как transient, поэтому оно не будет сохранятся в хранилище объектов.

Источники


http://stackoverflow.com/questions/5245600/what-does-the-keyword-transient-mean-in-java

http://stackoverflow.com/questions/20700530/why-use-transient-keyword-in-java

http://stackoverflow.com/questions/910374/why-does-java-have-transient-variables

http://jdevnotes.blogspot.ru/2011/05/transient.html

http://forum.vingrad.ru/forum/topic-123949/0.html

http://j4sq.blogspot.ru/2012/01/java-2-middle.html

вторник, 19 мая 2015 г.

Java Core. Splitting string with pipe character (“|”)

Разделение строки на подстроки при помощи символа "|"


Как разделить строку на подстроки, если в исходной строке слова разделены с помощью символа "|".

Исходная строка
String str = "with | great | power | comes | great | responsibility";

Символ | является метасимволом в регулярных выражениях, поэтому при использовании его для как разделителя в строке нам необходимо его экранировать
String[]values = str.split("\\|");

Всего существует 4 способа разделить строку на подстроки:
1. Метод split(String regex) в классе String
String[]values = str.split("\\|");
System.out.println(Arrays.toString(values));

2. Метод Pattern.quote
values = str.split(Pattern.quote("|"));
System.out.println(Arrays.toString(values));

3. Метод Pattern.compile
values = Pattern.compile("\\|").split(str);
System.out.println(Arrays.toString(values));

4. Класс StringTokenizer
// Split using StringTokenizer class
StringTokenizer tokenizer = new StringTokenizer(str, "|");
ArrayList<String> list = new ArrayList<String>(str.length());
while(tokenizer.hasMoreTokens()) {
           list.add(tokenizer.nextToken());
}
System.out.println(list); 


Весь код


import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.regex.Pattern;
 
 
public class TestA {
 
    public static void main(String[] args) {
 
 String str = "with | great | power | comes | great | responsibility";
 
 // Simple split method
 String[]values = str.split("\\|");
 System.out.println(Arrays.toString(values));
 
 // Split using Pattern.quote method
 values = str.split(Pattern.quote("|"));
 System.out.println(Arrays.toString(values));
 
 // Split using Pattern.compile method
 values = Pattern.compile("\\|").split(str);
 System.out.println(Arrays.toString(values));
 
 // Split using StringTokenizer class
 StringTokenizer tokenizer = new StringTokenizer(str, "|");
 ArrayList<String> list = new ArrayList<String>(str.length());
 while(tokenizer.hasMoreTokens()) {
            list.add(tokenizer.nextToken());
 }
 System.out.println(list); 
 
    }
 
}


Результаты



Источники


http://stackoverflow.com/questions/10796160/splitting-a-java-string-by-the-pipe-symbol-using-split

http://stackoverflow.com/questions/21524642/splitting-string-with-pipe-character