четвер, 19 липня 2012 р.

Рядки символів. Клас String.

У класі String існує маса корисних методів, які можна застосовувати до рядків(перед ім'ям методу вказуватимемо тип того значення, яке він повертає)
  1. int length() - повертає довжину рядка(кількість символів в ньому);
  2. String concat(String Str)-  додає рядок Str в кінець рядка.
  3. boolean isEmpty() - перевіряє, чи порожній рядок;
  4. String replace(a, b) - повертає рядок, де символ a(літерал або змінна типу char) замінений на символ b;
  5. String toLowerCase() - повертає рядок, де усі символи початкового рядка перетворені до малих букв;
  6. String toUpperCase() - повертає рядок, де усі символи початкового рядка перетворені до великих букв;
  7. boolean equals(s) - повертає істину, якщо рядок до якої застосований метод, співпадає з рядком s вказаною в аргументі методу (за допомогою оператора == рядка порівнювати не можна, як і будь-які інші об'єкти);
  8. boolean compareTo(s)- метод compareTo порівнює значення char також як і метод equals. Крім того метод повертає ціле від'ємне число, якщо перший рядок передує другий. Він повертає нульове значення, якщо рядки однакові, і ціле позитивне число, якщо перший порівнюваний об'єкт слід за другим. Метод compareTo скаже, що рядок "cat" передує "hat". Найбільш важливим для розуміння такого порівняння є те, що метод порівнює самі числові значення букв. Він визначає, що числове значення букви 'c' у "cat" менше ніж 'h' в "hat".
  9. boolean equalsIgnoreCase(s)- аналогічний до equals але при перевірці ігноруються регістр.
  10. int indexOf(ch) - повертає індекс символу ch в рядку (індекс це порядковий номер символу, але нумеруватися символи розпочинають з нуля). Якщо символ зовсім не буде знайдений, то поверне - 1. Якщо символ зустрічається в рядку декілька разів, то повернеться індекс його першого входження.
  11. int lastIndexOf(ch) - аналогічний попередньому методу, але повертає індекс останнього входження, якщо символ зустрівся в рядку кілька разів.
  12. int indexOf(ch, n) - повертає індекс символу ch в рядку, але розпочинає перевірку з індексу n(індекс це порядковий номер символу, але нумеруватися символи розпочинають з нуля).
  13. char charAt(n) - повертає символ, що знаходиться в рядку під індексом n(індекс це порядковий номер символу, але нумеруватися символи розпочинають з нуля).
  14. String replace('i','W') - замінює в рядку один символ на інший  
  15. String  trim()  - обрізає пробіли з обох кінців рядка.
  16. String substring - добуває підрядок із рядка. 
"Hello World".substring(6) - "World"
"Hello World".substring(3,8) - "lo Wo"

public class Main {
    public static void main(String[] args) {
        String s1 = "firefox";
        System.out.println(s1.toUpperCase()); // виведе«FIREFOX»
        String s2 = s1.replace('o', 'a');
        System.out.println(s2); // виведе «firefax»
        System.out.println(s2.charAt(1)); // виведе «i»
        int i;
        i = s1.length();
        System.out.println(i); // виведе 7
        i = s1.indexOf('f');
        System.out.println(i); // виведе 0
        i = s1.indexOf('r');
        System.out.println(i); // виведе 2
        i = s1.lastIndexOf('f');
        System.out.println(i); // виведе 4
        i = s1.indexOf('t');
        System.out.println(i); // виведе -1
        i = s1.indexOf('r',3);
        System.out.println(i); // виведе -1
    }
}

Приклад програми, яка виведе на екран індекси всіх пробілів в рядку, який вводиться користувачем з клавиатури:
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        for(int i=0; i < s.length(); i++) {
            if(s.charAt(i) == ' ') {
                System.out.println(i);
            }
        }
    }
}

9.1. Скласти програму:
яка запитує им'я людини і повторяє його на екрані із привітанням.
  1. import java.io.*;  
  2. public class Sim {  
  3.    public static void main(String[] args) throws IOException  
  4.     {  
  5.     String c;  
  6.     System.out.print("Enter your name:");  
  7.     BufferedReader kb=new BufferedReader(new InputStreamReader(System.in));  
  8.         c=kb.readLine();  
  9.       System.out.println("Hello "+c);  
  10.    }  
  11. }  

9.8. дано назву міста. Визначити, парне чи ні кількість символів в ньому.
  1. import java.io.*;  
  2. public class Sim {  
  3.    public static void main(String[] args) throws IOException  
  4.     {  
  5.     String c;  
  6.     System.out.print("Enter city name:");  
  7.     BufferedReader kb=new BufferedReader(new InputStreamReader(System.in));  
  8.         c=kb.readLine();  
  9.  if (c.length%2==0)  
  10.   System.out.println("Количество символов четно"else  
  11.    System.out.println("Количество символов нечетно");  
  12.     }  
  13. }  

9.13. дано слово. Вивести на екран его третій символ.
  1. import java.io.*;  
  2. public class Sim {  
  3.    public static void main(String[] args) throws IOException  
  4.     {  
  5.     String c;  
  6.     System.out.print("Enter city name:");  
  7.     BufferedReader kb=new BufferedReader(new InputStreamReader(System.in));  
  8.         c=kb.readLine();  
  9.       System.out.println("Third symbol of city name "+c.charAt(2));  
  10.    }  
  11. }  



Java: порівняння рядків

Метод equals і оператор == виконують дві абсолютно різних перевірки. Якщо метод equal порівнює символи всередині рядків, то оператор == порівнює дві змінні-посилання на об'єкти і перевіряє, чи вказують вони на різні об'єкти або на один і той же.

Существует два принципиально разных способа сравнить две строки в Java. В чем же их разница и как правильно это нужно делать ?
Дело в том, что строка в Java - это объект класса String. И когда вы пишите

if (str1 == str2) {}

ви перевіряєте чи мають ці дві змінні один і той же покажчик, іншими словами посилаються вони на один і той же об'єкт. Оскільки, після присвоєння значення однієї змінної в іншу копіювання об'єкта не відбувається, то порівняння зазначене вище поверне true. Але якщо ви порівнюєте два рядки двох різних об'єктів, то при подібному порівнянні ви отримаєте false.

Якщо ви хотете порівняти не адреси об'єктівв а саме значення рядкаи то тут потрібно використовувати відповідний метод equals().
 
if (str1.equals(str2)) {}

Проте із-за особливостей компиллятора Java такі порівняння також дадуть true:
 
if("str" == "str") {}
if("str" == "st"+"r") {}

На мій погляд щоб уникнути помилок при порівнянні рядків краще завжди використовувати метод equals оскільки в цьому випадку порівнюються саме значення рядків, а не адреси вказівників.

 Часто буває недостатньо просто знати, що є два рядки ідентичними. Для додатків, в яких потрібна сортування, потрібно знати, яка з двох рядків менше іншого. Для відповіді на це питання потрібно скористатися методом compareTo класу String. Якщо ціле значення, повернуте методом, негативно, то рядок, з якої був викликаний метод, менше рядка-параметр, якщо позитивно - більше. Якщо ж метод compareTo повернув значення 0, рядки ідентичні. Нижче наведена програма, в якій виконується бульбашкова сортування масиву рядків, а для порівняння рядків використовується метод compareTo. Ця програма видає відсортований в алфавітному порядку список рядків.
 
class SortString 
{
  static String arr[] = 
    {"Now", "is", "the", "time", "for", "all",    
     "good", "men", "to", "come", "to", "the",     
     "aid", "of", "their", "country" };
  public static void main(String args[]) 
  { 
    for (int j = 0; i < arr.length; j++) 
    {
      for (int i = j + 1; i < arr.length; i++) 
      { 
        if (arr[i].compareTo(arr[j]) < 0) 
        { 
          String t = arr[j];
          arr[j] = arr[i];
          arr[i] = t;
        } 
      }  
      System.out.println(arr[j]);
    } 
  } 
}
 

Немає коментарів:

Дописати коментар