Главная страница
Навигация по странице:

  • Имя файла

  • Символ

  • 1:15 PM

  • Возможные типы

  • Программирование. Программирование на Java Конспект лекций (ИТМО 2010). Справочник по языку Java и может использоваться как конспект лекционного курса Системы программирования Интернетприложений


    Скачать 0.85 Mb.
    НазваниеСправочник по языку Java и может использоваться как конспект лекционного курса Системы программирования Интернетприложений
    АнкорПрограммирование
    Дата05.08.2022
    Размер0.85 Mb.
    Формат файлаpdf
    Имя файлаПрограммирование на Java Конспект лекций (ИТМО 2010).pdf
    ТипСправочник
    #641226
    страница3 из 9
    1   2   3   4   5   6   7   8   9
    39

    Методы:
    public int length()
    длина строки в буфере public char charAt(int index)
    символ в заданной позиции public int capacity()
    размер буфера public StringBuffer append(…)
    добавление в конец буфера public StringBuffer insert(…)
    вставка в буфер public StringBuffer reverse()
    инверсия строки public void setCharAt(int i, char c)
    установка символа в заданной позиции public String toString()
    преобразование в строку
    Использование String и StringBuffer class ReverseString {
    public static String reverse(String source) {
    int i, len = source.length();
    StringBuffer dest = new StringBuffer(len);
    for (i = (len - 1); i >= 0; i--) {
    dest.append(source.charAt(i));
    }
    return dest.toString();
    }
    }
    Все строковые константы в Java имеют тип
    String
    . Оператор
    +
    для объектов типа
    String выполняет операцию соединения (конкатенации). Если в выражении присутствует хотя бы один объект типа
    String
    , остальные объекты преобразуются в
    String с помощью метода toString()
    Класс StringTokenizer
    Используется для разбиения строки на лексемы.
    Конструкторы:
    public StringTokenizer(String string)
    public StringTokenizer(String string, String delimiters)
    Методы:
    public boolean hasMoreTokens();
    public String nextToken();
    public String nextToken(String newDelimiters);
    40

    Пример:
    String sentence = "It's a sentence, it can be tokenized.";
    StringTokenizer st = new StringTokenizer(sentence, " ,.!?;-\n\r");
    while (st.hasMoreTokens()) {
    System.out.println(st.nextToken());
    }
    Интернационализация
    Интернационализация - это процесс создания приложений таким образом, чтобы они легко адаптировались для различных языков и регионов без внесения конструктивных изменений.
    Характеристики интернационализированного приложения:

    один и тот же код может работать в любой местности при условии добавления данных о локализации;

    приложение отображает текст на родном языке конечного пользователя;

    текстовые элементы не являются частью кода, а хранятся отдельно и запрашиваются динамически;

    поддержка новых языков не требует перекомпиляции;

    данные, зависящие от местности, такие как даты и денежные единицы, отображаются в соответствии с регионом и языком конечного пользователя;

    приложение может быть быстро и легко локализовано.
    Локализация
    Локализация - это процесс адаптации программного обеспечения для определенного региона или языка путем добавления специфических для данной местности компонентов и перевода текста.
    Данные, зависящие от местности:

    текст;

    числа;

    денежные единицы;

    дата и время;
    41


    изображения;

    цвета;

    звуки.
    Пример программы import java.util.*;
    public class IntTest {
    static public void main(String args[]) {
    if (args.length != 2) {
    System.out.println
    ("Format: java IntTest lang country");
    System.exit(-1);
    }
    String language = new String(args[0]);
    String country = new String(args[1]);
    Locale loc = new Locale(language, country);
    ResourceBundle messages =
    ResourceBundle.getBundle("MessagesBundle", loc);
    System.out.println(messages.getString("greeting"));
    System.out.println(messages.getString("inquiry"));
    System.out.println(messages.getString("farewell"));
    }
    }
    Имя файла
    Содержимое
    MessageBundle.properties greeting = Hello!
    inquiry = How are you?
    farewell = Goodbye!
    MessageBundle_ru_RU.properties greeting = Привет!
    inquiry = Как дела?
    farewell = До свидания!
    Класс Locale
    Представляет определенный географический, политический или культурный регион (местность).
    Конструкторы:
    public Locale (String language, // ISO 639
    String country) // ISO 3166
    public Locale (String language,
    String country,
    String variant)
    42

    Пример:
    Locale current = new Locale("en", "US");
    Locale loc = new Locale("ru", "RU", "koi8r");
    Методы:
    public String getLanguage()
    public String getCountry()
    public String getVariant()
    public static Locale getDefault()
    public static synchronized void setDefault(Locale loc)
    Метод
    Locale.getDefault()
    возвращает значение
    Locale
    , используемое по умолчанию. Установить его можно следующим образом:

    с помощью системных свойств user.language и user.region

    с помощью метода
    Locale.setDefault()
    Получить список возможных комбинаций языка и страны можно с помощью статического метода getAvailableLocales()
    различных классов, которые используют форматирование с учетом местных особенностей.
    Например:
    Locale list[] = DateFormat.getAvailableLocales()
    Класс ResourceBundle
    Абстрактный класс, предназначенный для хранения наборов зависящих от местности ресурсов. Обычно используется один из его подклассов:

    ListResourceBundle

    PropertyResourceBundle
    Представляет собой набор связанных классов с единым базовым именем, и различающихся суффиксами, задающими язык, страну и вариант.
    MessageBundle
    MessageBundle_ru
    MessageBundle_en_US
    MessageBundle_fr_CA_UNIX
    Методы:
    public static final ResourceBundle getBundle(String name)
    throws MissingResourceException public static final ResourceBundle getBundle(String name,
    Locale locale)
    throws MissingResourceException
    Эти методы возвращают объект одного из подклассов
    ResourceBundle с базовым именем name и местностью, заданной объектом locale или взятой
    43
    по умолчанию. При отсутствии данного ресурса осуществляется поиск наиболее подходящего из имеющихся (путем последовательного исключения суффиксов), при неудаче инициируется исключение
    MissingResourceException
    Класс ListResourceBundle
    Абстрактный класс, управляющий ресурсами с помощью списка. Используется путем создания набора классов, расширяющих ListResourceBundle, для каждой поддерживаемой местности и определения метода getContents()
    Пример:
    public class MessageBundle_ru extends ListResourceBundle {
    public Object[][] getContents() {
    return contents;
    }
    public Object[][] contents = {
    { "greeting", "Привет!" },
    { "inquiry", "Как дела?" },
    { "farewell", "До свидания!" }
    };
    }
    Массив contents содержит список пар ключ-значение, причем ключ должен быть объектом типа
    String
    , а значение -
    Object
    Объект класса
    ListResourceBundle можно получить вызовом статического метода
    ResourceBundle.getBundle()
    ResourceBundle messages =
    ResourceBundle.getBundle("MessageBundle",
    new Locale("ru", "RU"));
    Поиск классов осуществляется в следующей последовательности:
    1. MessageBundle_ru_RU.class
    2. MessageBundle_ru.class
    3. MessageBundle.class
    Для получения желаемого значения объекта используется метод getObject
    :
    String s = (String) messages.getObject("greeting");
    44

    Класс PropertyResourceBundle
    Абстрактный класс, управляющий ресурсами с помощью набора свойств.
    Используется в случаях, когда локализуемые объекты имеют тип
    String
    Ресурсы хранятся отдельно от кода, поэтому для добавления новых ресурсов не требуется перекомпиляция.
    Пример файлa
    Message_it.properties
    :
    greeting = Ciao!
    inquiry = Come va?
    farewell = Arrivederci!
    Объект класса PropertyResourceBundle можно получить вызовом статического метода
    ResourceBundle.getBundle()
    :
    ResourceBundle messages =
    ResourceBundle.getBundle("MessageBundle",
    new Locale("it", "IT"));
    Если метод getBundle()
    не может найти соответствующий класс, производится поиск файлов с расширением .properties в той же последовательности, как и для
    ListResourceBundle
    :
    1. MessageBundle_it_IT.properties
    2. MessageBundle_it.properties
    3. MessageBundle.properties
    Для получения значения свойства используется метод getString
    String s = messages.getString("greeting")
    Иерархия классов java.text
    Иерархия классов пакета java.text приведена на рис. 7.
    Класс NumberFormat
    Абстрактный класс, позволяющий форматировать числа, денежные единицы, проценты в соответствии с форматом, принятым в определенной местности
    *
    Форматирование осуществляется в 2 этапа:
    *
    Список допустимых местностей, для которых определены форматы, можно получить с помощью статического метода public Locale[] NumberFormat.getAvailableLocales()
    45

    Рисунок 7. Пакет java.text
    1. Получение требуемого экземпляра класса с помощью одного из методов

    getNumberInstance

    getCurrencyInstance

    getPercentInstance
    2. Вызов метода format()
    для получения отформатированной строки.
    46

    Числа:
    NumberFormat formatter =
    NumberFormat.getNumberInstance(Locale.GERMANY);
    String result = formatter.format(123456.789);
    Денежные единицы:
    NumberFormat formatter =
    NumberFormat.getCurrencyInstance(Locale.FRANCE);
    String result = formatter.format(4999.99);
    Проценты:
    NumberFormat formatter =
    NumberFormat.getPercentInstance(Locale.US);
    String result = formatter.format(.75);
    Класс DecimalFormat
    Позволяет создавать собственные форматы для чисел, денежных единиц и процентов.
    Порядок использования:
    1. Вызывается конструктор с шаблоном в качестве аргумента
    String pattern = "###,##0.##";
    DecimalFormat formatter = new DecimalFormat(pattern);
    2. Вызывается метод format() для получения отформатированной строки
    String s = formatter.format(123123.456);
    Значения символов шаблона:
    Символ
    Значение
    0
    цифра
    #
    цифра, или пробел в случае нуля десятичный разделитель
    ,
    групповой разделитель
    ;
    разделитель форматов
    - префикс отрицательного числа
    %
    процент (значение умножается на 100)
    ?
    промилле (значение умножается на 1000)
    ¤
    заменяется обозначением денежной единицы (международным если удвоен) и в формате вместо десятичного будет использован денежный разделитель
    X
    любой другой символ в префиксе или суффиксе '
    используется для экранирования специальных символов в префиксе или суффиксе
    47

    Класс DecimalFormatSymbols
    Используется для изменения значения используемых по умолчанию разделителей в классе
    DecimalFormat
    Конструкторы:
    public DecimalFormatSymbols()
    public DecimalFormatSymbols(Locale locale)
    Методы:
    public void setZeroDigit(char c)
    public void setGroupingSeparator(char c)
    public void setDecimalSeparator(char c)
    public void setPerMill(char c)
    public void setPercent(char c)
    public void setDigit(char c)
    public void setNaN(char c)
    public void setInfinity(char c)
    public void setMinusSign(char c)
    public void setPatternSeparator(char c)
    Имеются соответствующие методы get()
    для получения установленных значений.
    Для передачи значений разделителей объект
    DecimalFormatSymbols передается конструктору класса
    DecimalFormat в качестве аргумента:
    DecimalFormatSymbols symbols = new DecimalFormatSymbols();
    symbols.setGroupingSeparator(" ");
    DecimalFormat formatter = new DecimalFormat("#,##0.00", symbols);
    String s = formatter.format(4.50);
    Класс DateFormat
    Абстрактный класс, позволяющий форматировать дату и время в соответствии с форматом, принятым в определенной местности
    *
    Форматирование осуществляется в 2 этапа:
    1. Получение требуемого экземпляра класса с помощью одного из методов

    getDateInstance

    getTimeInstance

    getDateTimeInstance
    *
    Список допустимых местностей, для которых определены форматы, можно получить с помощью статического метода public Locale[] DateFormat.getAvailableLocales()
    48

    2. Вызов метода format()
    для получения отформатированной строки.
    Дата:
    DateFormat formatter =
    DateFormat.getDateInstance(DateFormat.SHORT, Locale.UK);
    String result = formatter.format(new Date());
    Время:
    DateFormat formatter =
    DateFormat.getTimeInstance(DateFormat.LONG,
    Locale.FRANCE);
    String result = formatter.format(new Date());
    Дата и время:
    DateFormat formatter =
    DateFormat.getDateTimeInstance(DateFormat.FULL,
    DateFormat.FULL,
    Locale.US);
    String result = formatter.format(new Date());
    Класс SimpleDateFormat
    Позволяет создавать форматы для даты и времени.
    Порядок использования:
    1. Вызывается конструктор с шаблоном в качестве аргумента:
    SimpleDateFormat formatter = new SimpleDateFormat("K:mm EEE MMM d ''yy");
    2. Вызывается метод format() для получения отформатированной строки:
    String s = formatter.format(new Date());
    Шаблоны SimpleDateFormat
    Символ
    Значение
    Тип
    Пример
    G
    обозначение эры текст
    AD
    y год число
    1996
    M
    месяц года текст/число
    July или
    07
    d число месяца число
    23
    h часы (1-12)
    число
    5
    H
    часы (0-23)
    число
    22
    m минуты число
    45
    s секунды число
    31
    S
    миллисекунды число
    978
    E
    день недели текст
    Tuesday
    D
    номер дня в году число
    189
    F
    день недели в месяце число
    2 (2
    nd
    Wed in July)
    49
    w
    неделя в году число
    27
    W
    неделя в месяце число
    2
    a знак AM/PM
    текст
    PM
    k часы (1-24)
    число
    24
    K
    часы (0-11)
    число
    0
    z временная зона текст
    GMT
    '
    символ экранирования
    Для текста 4 и более символов задают полную форму, 3 и меньше - сокращенную. Для чисел количество символов указывает минимальный длину числа (кроме года - 2 символа обозначают год, записанный 2-мя цифрами).
    Смешанный формат с 3 и более символами - текст, менее 3-х — число.
    Класс DateFormatSymbols
    Используется для изменения названий месяцев, дней недели и других значений в классе
    SimpleDateFormat
    Конструкторы:
    public DateFormatSymbols()
    public DateFormatSymbols(Locale locale)
    Методы:
    public void setEras(String newValue[])
    public void setMonths(String newValue[])
    public void setShortMonths(String newValue[])
    public void setWeekDays(String newValue[])
    public void setShortWeekDays(String newValue[])
    public void setAmPmStrings(String newValue[])
    public void setZoneStrings(String newValue[])
    public void setPatternChars(String newValue[])
    Имеются соответствующие методы get()
    для получения установленных значений.
    Для передачи значений разделителей объект
    DateFormatSymbols передается конструктору класса
    SimpleDateFormat в качестве аргумента:
    DateFormatSymbols symbols = new DateFormatSymbols();
    String weekdays[] = {"Пн","Вт","Ср","Чт","Пт","Сб","Вс"};
    symbols.setShortWeekDays(weekdays);
    DecimalFormat formatter = new SimpleDateFormat("E", symbols);
    String s = formatter.format(new Date());
    50

    Класс MessageFormat
    Используется для выдачи сообщений на различных языках с включением изменяющихся объектов.
    Использование класса:
    1. Выделение переменных объектов в сообщении:
    At 1:15 PM on April 13, 1998, we detected 7 spaceships on the planet Mars.
    2. Помещение шаблона сообщения в ResourceBundle:
    ResourceBundle messages =
    ResourceBundle.getBundle("MessageBundle",
    currentLocale);
    cодержимое файла
    MessageBundle.properties
    :
    template = At {2,time,short} on {2,date,long}, we detected {1,number,integer} spaceships on the planet {0}.
    planet = Mars
    3. Установка аргументов сообщения:
    Object[] args = {
    messages.getString("planet"),
    new Integer(7),
    new Date()
    }
    4. Создание объекта
    MessageFormat
    :
    MessageFormat formatter = new MessageFormat(messages.getString("template"));
    formatter.setLocale(currentLocale);
    5. Форматирование сообщения:
    String s = formatter.format(args);
    Синтаксис аргументов MessageFormat
    { индекс аргумента, [ тип, [ стиль ] ] }
    Индекс задает порядковый индекс аргумента в массиве объектов (0-9).
    Типы и стили аргументов:
    Возможные типы
    Возможные стили
    number currency, percent, integer, шаблон числа date short, long, full, medium, шаблон даты time short, long, full, medium, шаблон времени choice шаблон выбора
    51

    Если тип и стиль отсутствуют, то аргумент должен являться строкой. При отсутствии стиля, он принимается по умолчанию.
    Класс ChoiceFormat
    Используется для задания возможности выбора различных элементов в зависимости от значения параметров.
    Использование класса:
    1. Выделение переменных объектов в сообщении:
    There are no files on disk C.
    There is one file on disk C.
    There are 3 files on disk C.
    2. Помещение шаблона сообщения в ResourceBundle:
    cодержимое файла
    MessageBundle.properties
    :
    template = There {0} on disk {1}.
    no = are no files one = is one file many = are {2} files
    3. Создание объекта
    ChoiceFormat
    :
    double limits[] = {0,1,2}
    String choices[] = { messages.getString("no"),
    messages.getString("one"),
    messages.getString("many") }
    ChoiceFormat choice = new ChoiceFormat(limits, choices);
    4. Создание объекта
    MessageFormat
    :
    MessageFormat formatter = new MessageFormat(messages.getString("template"));
    formatter.setLocale(currentLocale);
    Format[] formats = { choiceForm, null,
    NumberFormat.getInstance() }
    formatter.setFormats(formats);
    5. Установка аргументов сообщения:
    Object[] args = { 1, "C", 1 };
    6. Форматирование сообщения
    String s = formatter.format(args);
    Класс Collator
    Используется для выполнения сравнений строк в различных языках.
    52

    Получение объекта:
    Collator c = Collator.getInstance(Locale.US);
    Методы:
    public int compare(String s1, String s2)
    public void setStrength(int value) // value = PRIMARY,
    // SECONDARY
    // TERTIARY
    // IDENTICAL
    public void setDecomposition(int value)
    // value = NO_DECOMPOSITION
    // CANONICAL_DECOMPOSITION
    // FULL_DECOMPOSITION
    Пример:
    c.setStrength(PRIMARY);
    if (c.compare("ABC", "abc") < 0) {
    // "ABC" < "abc"
    } else {
    // "ABC" >= "abc"
    }
    Класс RuleBasedCollator
    Используется для задания собственных правил сортировки символов.
    Набор правил передается конструктору в виде строки символов:
    String rule = "a < b < c < d";
    RuleBasedCollator c = new RuleBasedCollator(rule);
    Формат правил:
    <
    следующий символ больше предыдущего
    ;
    следующий символ больше предыдущего без учета акцентов
    ,
    следующий символ больше предыдущего без учета размера букв
    =
    следующий символ равен предыдущему
    @
    сортировка акцентов в обратном порядке
    &
    дополнительное правило для уже встречавшихся символов
    Пример:
    RuleBasedCollator us =
    (RuleBasedCollator) Collator.getInstance(Locale.US);
    String rule = us.getRules();
    String extraRule = "& c,C < ch,CH";
    RuleBasedCollator sp = new RuleBasedCollator(rule + extraRule);
    1   2   3   4   5   6   7   8   9


    написать администратору сайта