Java String charAt() Method

Beginner
⏱️ 8 min read
📚 Updated: Jul 2026
🎯 5 Examples
String Methods

What You’ll Learn

The charAt() method belongs to java.lang.String and lets you read a single character at a specific position. Strings in Java are indexed from 0, so understanding charAt() is the first step toward parsing text, validating input, and building algorithms like palindrome checks.

01

Zero-Based Index

First char is at 0.

02

Returns char

Primitive 16-bit value.

03

One Parameter

Pass the index int.

04

Bounds Check

Invalid index throws.

05

Loop Friendly

Walk a string by index.

06

vs codePointAt()

Unicode edge cases.

Definition and Usage

In Java, a String is a sequence of characters. The charAt(int index) method returns the character stored at that position without changing the original string—strings are immutable, so every read operation is safe and side-effect free.

Think of a string like a row of boxes numbered from left to right starting at 0. For "Hello, Java!", index 0 is 'H', index 6 is a space, and index 7 is 'J'. Calling charAt(7) gives you that letter directly.

💡
Beginner Tip

The last valid index is always string.length() - 1, not length(). If a string has 12 characters, valid indexes are 0 through 11.

📝 Syntax

The charAt() method is declared in the String class:

java
public char charAt(int index)

Parameters

  • index — the position of the character to retrieve. Must be between 0 and length() - 1 inclusive.

Return Value

Returns the char at the specified index. The return type is primitive char, not String.

Exceptions

Throws StringIndexOutOfBoundsException if index is negative or greater than or equal to the string length.

⚡ Quick Reference

StringCallResult
"Hello, Java!"charAt(0)'H'
"Hello, Java!"charAt(7)'J'
"Hello, Java!"charAt(11)'!'
"abc"charAt(3)StringIndexOutOfBoundsException
""charAt(0)StringIndexOutOfBoundsException
Basic
str.charAt(0)

First character

Last char
str.charAt(str.length() - 1)

Final character

Loop
for (int i = 0; i < s.length(); i++)

Visit every index

Compare
ch == 'A'

Test a char value

Examples Gallery

Compile and run these programs in any Java 8+ environment. Each example builds on the previous one so you can see how charAt() fits into real code.

📚 Getting Started

Read a single character from a familiar greeting string.

Example 1 — Basic charAt() Usage

Retrieve the character at index 7 in "Hello, Java!". Count from 0: H(0), e(1), l(2), l(3), o(4), ,(5), space(6), J(7).

java
public class CharAtExample {
    public static void main(String[] args) {
        String str = "Hello, Java!";

        char result = str.charAt(7);

        System.out.println("Character at index 7: " + result);
    }
}

How It Works

charAt(7) looks up the eighth character (zero-based index 7) and returns the primitive char 'J'. Concatenating with a string in println automatically converts the char to text for display.

Example 2 — First and Last Character

A common pattern: combine charAt() with length() to read both ends of a string.

java
public class FirstLastChar {
    public static void main(String[] args) {
        String word = "Java";

        char first = word.charAt(0);
        char last  = word.charAt(word.length() - 1);

        System.out.println("First: " + first);
        System.out.println("Last:  " + last);
    }
}

How It Works

Index 0 always holds the first character. Because indexes run from 0 to length() - 1, subtracting 1 from the length gives the last valid index.

📈 Practical Patterns

Looping, counting, and guarding against invalid indexes.

Example 3 — Loop Through Every Character

Before enhanced for-each on toCharArray(), beginners often iterate with an index and charAt()—still useful when you need the position.

java
public class CharAtLoop {
    public static void main(String[] args) {
        String text = "Hi";

        for (int i = 0; i < text.length(); i++) {
            System.out.println("Index " + i + ": " + text.charAt(i));
        }
    }
}

How It Works

The loop runs while i < length(), so i never equals length()—avoiding an out-of-bounds call. Each iteration prints the index and its character.

Example 4 — Count Vowels in a String

Use charAt() to inspect each letter and tally vowels—a classic beginner exercise.

java
public class VowelCount {
    public static void main(String[] args) {
        String input = "Education";
        int vowels = 0;

        for (int i = 0; i < input.length(); i++) {
            char ch = Character.toLowerCase(input.charAt(i));
            if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
                vowels++;
            }
        }

        System.out.println("Vowels: " + vowels);
    }
}

How It Works

Each character is fetched with charAt(i), normalized to lowercase, then compared against vowel letters. This pattern appears in palindrome checks, anagram utilities, and input validation.

Example 5 — Avoid StringIndexOutOfBoundsException

Always validate the index when it comes from user input or external data.

java
public class SafeCharAt {
    public static char safeCharAt(String text, int index) {
        if (text == null || index < 0 || index >= text.length()) {
            throw new IllegalArgumentException("Invalid index for string");
        }
        return text.charAt(index);
    }

    public static void main(String[] args) {
        String data = "Code";

        System.out.println(safeCharAt(data, 2));   // 'd'
        System.out.println(safeCharAt(data, 10));  // throws IllegalArgumentException
    }
}

How It Works

Wrapping charAt() in a guard clause turns the low-level StringIndexOutOfBoundsException into a clearer error for callers. In production APIs, validate early and fail with a meaningful message.

🚀 Common Use Cases

  • Palindrome checks — compare characters from both ends using charAt(i) and charAt(length - 1 - i).
  • Parsing fixed formats — read delimiters or sign characters at known positions (dates, IDs, CSV fields).
  • Input validation — verify the first character is a letter or a specific symbol.
  • Character-by-character algorithms — counting, searching, or transforming text when you need the index.
  • Teaching fundamentals — introduce string indexing before moving to substring() and regular expressions.

🧠 How charAt() Works

1

You call charAt(index)

Java receives the target String and the zero-based int index.

Input
2

Bounds are checked

If index < 0 or index >= length(), Java throws StringIndexOutOfBoundsException.

Validate
3

Character is read

The JVM reads the UTF-16 code unit at that offset inside the string’s internal character array.

Lookup
=

char returned

A single 16-bit character value you can compare, print, or pass to other methods.

📝 Notes

  • Indexes are zero-based: the first character is at 0, not 1.
  • Valid indexes run from 0 to length() - 1. Calling charAt(length()) always fails.
  • charAt() returns a char, not a String. Use String.valueOf(ch) if you need a one-character string.
  • Strings are immutable—charAt() never modifies the original text.
  • For emoji and other supplementary Unicode characters, one visible symbol may occupy two char values; consider codePointAt() for those cases.

⚡ Optimization

charAt() is optimized for constant-time (O(1)) access to a single character. For one-off reads it is the right choice. If you need to scan the entire string many times or perform heavy in-place edits, converting once with toCharArray() or iterating with an enhanced for-loop over char[] can reduce repeated method calls—though for typical beginner programs the difference is negligible.

Conclusion

The charAt() method is one of the most fundamental tools in Java string handling. It gives you direct, readable access to any character by index and forms the building block for loops, comparisons, and parsing logic.

Remember zero-based indexing, guard against out-of-range values, and reach for codePointAt() when full Unicode support matters. Practice with the examples above until indexing feels natural—then move on to substring() and other String methods.

💡 Best Practices

✅ Do

  • Use length() - 1 for the last character
  • Loop with i < str.length(), not <=
  • Validate indexes from user input before calling charAt()
  • Compare chars with == for primitive values
  • Use Character.toLowerCase() when case should not matter

❌ Don’t

  • Assume the first character is at index 1
  • Call charAt() on a null reference
  • Ignore StringIndexOutOfBoundsException on untrusted data
  • Expect charAt() to return a String
  • Use charAt() alone for complex emoji parsing

Key Takeaways

Knowledge Unlocked

Five things to remember about charAt()

Use these points whenever you read characters from a Java string.

5
Core concepts
🔄 02

Returns char

16-bit primitive type.

Return
03

Bounds Matter

Invalid index throws.

Safety
📈 04

Loop Friendly

Walk with an index.

Pattern
🌐 05

Unicode Edge

Use codePointAt() for emoji.

Advanced

❓ Frequently Asked Questions

charAt(int index) returns the character at the given position in a String. Indexing starts at 0, so the first character is at index 0 and the last is at length() - 1.
Call it on any String object: string.charAt(index). The method is defined in java.lang.String and takes one int parameter—the zero-based index.
It returns a primitive char—the 16-bit UTF-16 code unit at that index. It does not return a String. To build a String from characters, use concatenation or String.valueOf(ch).
Java throws StringIndexOutOfBoundsException when index is negative or greater than or equal to string.length(). Always validate the index or use a try-catch when input is untrusted.
Conceptually yes—both use zero-based positions—but a String is not a char array. charAt() is the safe, readable way to read one character without calling toCharArray() first.
Use charAt() for basic ASCII and BMP text. Use codePointAt() when you need full Unicode code points, such as emoji or rare scripts that use surrogate pairs (two char values for one symbol).

Keep Building Java String Skills

Master character access with charAt(), then explore interview programs and pattern exercises to reinforce loops and indexing.

Next: codePointAt() →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

6 people found this page helpful