JavaコアAPI
Java は豊富なクラスのセットを提供します コア 手術用 より一般的です。この記事では、最もよく使用される String、StringBuilder、 ラッパー クラスと最新の日付/時刻 API。
何を学ぶか
- 文字列: 不変性と主なメソッド
- 効率的な連結のための StringBuilder
- ラッパークラスとオートボクシング
- LocalDate、LocalTime、LocalDateTime
- 日付のフォーマットと解析
- タイムゾーンの ZonedDateTime
文字列クラス
String Java で最もよく使用されるクラスの 1 つです。文字列は
不変: 一度作成すると、変更することはできません。
// Modi per creare String
String nome = "Mario Rossi"; // literal (consigliato)
String cognome = new String("Verdi"); // costruttore (sconsigliato)
// String vuota vs null
String vuota = ""; // stringa vuota, lunghezza 0
String nulla = null; // riferimento nullo, nessun oggetto
// Immutabilita: i metodi restituiscono NUOVE stringhe
String originale = "Java";
String maiuscolo = originale.toUpperCase();
System.out.println(originale); // "Java" - non modificato!
System.out.println(maiuscolo); // "JAVA" - nuova stringa
主な手法
String corso = "Programmazione Java";
// Lunghezza
int lunghezza = corso.length(); // 19
// Accesso caratteri
char primo = corso.charAt(0); // 'P'
char ultimo = corso.charAt(corso.length() - 1); // 'a'
// Ricerca
int posizione = corso.indexOf("Java"); // 16
int ultima = corso.lastIndexOf("a"); // 18
boolean contiene = corso.contains("Java"); // true
boolean inizia = corso.startsWith("Prog"); // true
boolean finisce = corso.endsWith("Java"); // true
// Confronto
String altro = "programmazione java";
boolean uguale = corso.equals(altro); // false
boolean ugualeIgnoreCase = corso.equalsIgnoreCase(altro); // true
int confronto = corso.compareTo(altro); // negativo (P < p)
// Estrazione
String sub1 = corso.substring(0, 14); // "Programmazione"
String sub2 = corso.substring(15); // "Java"
// Trasformazione
String upper = corso.toUpperCase(); // "PROGRAMMAZIONE JAVA"
String lower = corso.toLowerCase(); // "programmazione java"
String trimmed = " spazi ".trim(); // "spazi"
String replaced = corso.replace("Java", "Python"); // "Programmazione Python"
分割と結合
// Split: divide la stringa in array
String csv = "Mario,Rossi,25,Milano";
String[] parti = csv.split(",");
// parti = ["Mario", "Rossi", "25", "Milano"]
for (String parte : parti) {
System.out.println(parte);
}
// Join: unisce array in stringa
String[] materie = {"Java", "Python", "SQL"};
String elenco = String.join(", ", materie); // "Java, Python, SQL"
// Split con limite
String frase = "uno-due-tre-quattro";
String[] primiDue = frase.split("-", 2); // ["uno", "due-tre-quattro"]
文字列ビルダー
StringBuilder それはクラスです 可変 構築する
特にループ内で文字列を効率的に処理します。
// INEFFICIENTE con String (crea molte stringhe intermedie)
String risultato = "";
for (int i = 0; i < 1000; i++) {
risultato += i + ", "; // Crea una nuova String ad ogni iterazione!
}
// EFFICIENTE con StringBuilder
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append(i).append(", ");
}
String risultatoEfficiente = sb.toString();
StringBuilder sb = new StringBuilder("Hello");
// Append: aggiunge alla fine
sb.append(" ");
sb.append("World");
sb.append(123); // "Hello World123"
// Insert: inserisce in posizione
sb.insert(5, ","); // "Hello, World123"
// Delete: rimuove caratteri
sb.delete(11, 14); // "Hello, World"
// Replace: sostituisce
sb.replace(0, 5, "Ciao"); // "Ciao, World"
// Reverse: inverte
sb.reverse(); // "dlroW ,oaiC"
// Conversione finale
String finale = sb.toString();
ラッパークラス
I ラッパー これらはプリミティブ型を「包み込む」クラスです。 オブジェクトとして (コレクションなどで) 使用できるようにします。
プリミティブとラッパー
| 原生的 | ラッパー | 一般的な使用方法 |
|---|---|---|
| 整数 | 整数 | コレクション、null 処理 |
| ダブル | ダブル | Null 許容の小数 |
| ブール値 | ブール値 | トライステート (true/false/null) |
| 文字 | キャラクター | コレクション内のフォント |
// Autoboxing: primitivo -> wrapper (automatico)
Integer votoWrapper = 28; // equivale a: Integer.valueOf(28)
Double media = 27.5;
// Unboxing: wrapper -> primitivo (automatico)
int votoPrimitivo = votoWrapper; // equivale a: votoWrapper.intValue()
double mediaDouble = media;
// Parsing: String -> numero
int numero = Integer.parseInt("42");
double decimale = Double.parseDouble("3.14");
boolean flag = Boolean.parseBoolean("true");
// Conversione numero -> String
String stringa = Integer.toString(42);
String stringa2 = String.valueOf(42);
// Metodi utili
int max = Integer.MAX_VALUE; // 2147483647
int min = Integer.MIN_VALUE; // -2147483648
int confronto = Integer.compare(10, 20); // negativo
// ATTENZIONE al null!
Integer nullable = null;
// int valore = nullable; // NullPointerException!
日付と時刻 API (java.time)
Java 8 以降の新しい API java.time それらを置き換えます
クラスの問題 Date e Calendar.
LocalDate - 日付のみ
import java.time.LocalDate;
import java.time.Month;
// Creazione
LocalDate oggi = LocalDate.now();
LocalDate compleanno = LocalDate.of(2000, 3, 15);
LocalDate conMonth = LocalDate.of(2000, Month.MARCH, 15);
LocalDate parsed = LocalDate.parse("2024-03-15");
// Getter
int anno = oggi.getYear(); // 2025
int mese = oggi.getMonthValue(); // 2
Month month = oggi.getMonth(); // FEBRUARY
int giorno = oggi.getDayOfMonth(); // 1
int giornoAnno = oggi.getDayOfYear(); // 32
// Manipolazione (restituisce nuova istanza)
LocalDate domani = oggi.plusDays(1);
LocalDate traUnMese = oggi.plusMonths(1);
LocalDate annoScorso = oggi.minusYears(1);
// Confronto
boolean prima = compleanno.isBefore(oggi);
boolean dopo = compleanno.isAfter(oggi);
boolean uguale = compleanno.isEqual(oggi);
// Calcolo differenza
long giorni = oggi.until(compleanno).getDays();
LocalTime - 時間のみ
import java.time.LocalTime;
// Creazione
LocalTime adesso = LocalTime.now();
LocalTime lezione = LocalTime.of(9, 30); // 09:30
LocalTime preciso = LocalTime.of(9, 30, 45); // 09:30:45
LocalTime parsed = LocalTime.parse("14:30:00");
// Getter
int ora = adesso.getHour();
int minuto = adesso.getMinute();
int secondo = adesso.getSecond();
// Manipolazione
LocalTime traUnOra = adesso.plusHours(1);
LocalTime mezzOraFa = adesso.minusMinutes(30);
// Costanti utili
LocalTime mezzanotte = LocalTime.MIDNIGHT; // 00:00
LocalTime mezzogiorno = LocalTime.NOON; // 12:00
LocalDateTime - 日付と時刻
import java.time.LocalDateTime;
// Creazione
LocalDateTime oraEsatta = LocalDateTime.now();
LocalDateTime esame = LocalDateTime.of(2025, 2, 15, 9, 0);
LocalDateTime combinato = LocalDateTime.of(
LocalDate.of(2025, 2, 15),
LocalTime.of(9, 0)
);
// Estrarre componenti
LocalDate data = oraEsatta.toLocalDate();
LocalTime tempo = oraEsatta.toLocalTime();
// Manipolazione
LocalDateTime prossimo = oraEsatta.plusDays(7).plusHours(2);
// Formattazione
System.out.println(oraEsatta); // 2025-02-01T11:30:00.123
フォーマットと解析
import java.time.format.DateTimeFormatter;
import java.util.Locale;
LocalDateTime dt = LocalDateTime.now();
// Pattern predefiniti
DateTimeFormatter isoDate = DateTimeFormatter.ISO_LOCAL_DATE;
System.out.println(dt.format(isoDate)); // 2025-02-01
// Pattern personalizzati
DateTimeFormatter italiano = DateTimeFormatter.ofPattern("dd/MM/yyyy");
DateTimeFormatter completo = DateTimeFormatter.ofPattern("dd MMMM yyyy, HH:mm", Locale.ITALIAN);
DateTimeFormatter americano = DateTimeFormatter.ofPattern("MM-dd-yyyy hh:mm a", Locale.US);
System.out.println(dt.format(italiano)); // 01/02/2025
System.out.println(dt.format(completo)); // 01 febbraio 2025, 11:30
System.out.println(dt.format(americano)); // 02-01-2025 11:30 AM
// Parsing con formato
String dataStringa = "15/03/2025";
LocalDate dataParsed = LocalDate.parse(dataStringa, italiano);
ZonedDateTime - タイムゾーン
import java.time.ZonedDateTime;
import java.time.ZoneId;
// Ora corrente nel fuso locale
ZonedDateTime quiOra = ZonedDateTime.now();
// Ora in fusi specifici
ZonedDateTime roma = ZonedDateTime.now(ZoneId.of("Europe/Rome"));
ZonedDateTime newYork = ZonedDateTime.now(ZoneId.of("America/New_York"));
ZonedDateTime tokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
System.out.println("Roma: " + roma);
System.out.println("New York: " + newYork);
System.out.println("Tokyo: " + tokyo);
// Conversione tra fusi
ZonedDateTime romaOra = ZonedDateTime.now(ZoneId.of("Europe/Rome"));
ZonedDateTime stessaMomentoNY = romaOra.withZoneSameInstant(ZoneId.of("America/New_York"));
// Lista fusi disponibili
Set<String> fusi = ZoneId.getAvailableZoneIds();
完全な例: 試験カレンダー管理
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class CalendarioEsami {
private static final DateTimeFormatter FORMATO_ITALIANO =
DateTimeFormatter.ofPattern("EEEE d MMMM yyyy", Locale.ITALIAN);
private static final DateTimeFormatter FORMATO_ORA =
DateTimeFormatter.ofPattern("HH:mm");
public static void main(String[] args) {
// Dati esame
String corso = "Programmazione Java";
LocalDate dataEsame = LocalDate.of(2025, Month.FEBRUARY, 15);
LocalTime oraInizio = LocalTime.of(9, 0);
LocalTime oraFine = LocalTime.of(12, 0);
// Calcolo giorni mancanti
LocalDate oggi = LocalDate.now();
Period differenza = Period.between(oggi, dataEsame);
long giorniMancanti = oggi.until(dataEsame).getDays();
// Stampa informazioni
StringBuilder sb = new StringBuilder();
sb.append("╔════════════════════════════════════════╗\n");
sb.append("║ PROSSIMO ESAME ║\n");
sb.append("╠════════════════════════════════════════╣\n");
sb.append(String.format("║ Corso: %-31s ║%n", corso));
sb.append(String.format("║ Data: %-31s ║%n",
dataEsame.format(FORMATO_ITALIANO)));
sb.append(String.format("║ Ora: %s - %s ║%n",
oraInizio.format(FORMATO_ORA),
oraFine.format(FORMATO_ORA)));
sb.append("╠════════════════════════════════════════╣\n");
if (giorniMancanti > 0) {
sb.append(String.format("║ Mancano: %d giorni ║%n", giorniMancanti));
} else if (giorniMancanti == 0) {
sb.append("║ L'ESAME E OGGI! ║\n");
} else {
sb.append("║ Esame già sostenuto ║\n");
}
sb.append("╚════════════════════════════════════════╝");
System.out.println(sb.toString());
}
}
結論
この記事では、コア Java API: String と StringBuilder について説明しました。 テキスト操作用、プリミティブ型用のラッパー、および最新の 日付と時刻を管理するための Date/Time API。
Nel 次の記事 私たちはそれを見ます コレクションフレームワーク: リスト、セット、マップ、およびさまざまな実装。
覚えておくべき重要なポイント
- 弦: 不変、複数の連結には StringBuilder を使用します
- 文字列ビルダー: 変更可能で、文字列の構築に効率的
- ラッパー: オートボクシングによりプリミティブ/オブジェクトが自動的に変換されます
- 現地の日付/時刻: 不変でスレッドセーフな最新の API
- 日時フォーマッタ: 日付のフォーマットと解析を行うには
- ゾーン日時: タイムゾーンを管理するには







