Core Java

Java String Slicing Example

Python provides a powerful and concise way to slice Strings using simple syntax. However, Java does not have built-in String slicing like Python. Let us delve into how to implement String slicing in Java.

1. What is String Slicing?

String Slicing refers to extracting a specific portion of a string based on specified start and end indices. It is a powerful feature that allows selective retrieval of substrings without modifying the original string. Many programming languages, including Python, provide built-in support for slicing with minimal syntax. However, Java does not have a dedicated slicing mechanism and requires additional logic, such as using the substring() method or looping through characters manually, to achieve similar functionality.

Slicing is useful in various scenarios, such as extracting filenames from paths, handling text data, parsing input strings, and working with formatted data. In Python, slicing is straightforward, whereas in Java, developers must implement custom logic for step slicing and negative indexing.

2. Understanding String Slicing in Python

Python makes string slicing extremely simple using the string[start:stop:step] notation. This allows extracting substrings with just a few keystrokes. The start index is inclusive, while the stop index is exclusive, meaning the substring does not include the character at the stop position. Additionally, an optional step parameter controls the interval at which characters are selected.

Here are some examples of Python’s string slicing:

01
02
03
04
05
06
07
08
09
10
11
12
13
text = "Hello, World!"
 
# Extract substring from index 0 to 5 (excluding index 5)
print(text[0:5])   # Output: Hello
 
# Extract substring from index 7 to 12
print(text[7:12])  # Output: World
 
# Reverse the entire string using a step of -1
print(text[::-1])  # Output: !dlroW ,olleH
 
# Extract every second character
print(text[0:len(text):2])  # Output: Hlo ol!

Python’s slicing is highly flexible, allowing negative indexing and step values to modify the slicing behavior. For example, using a negative step value reverses the order of the extracted substring, as shown above. Java, however, lacks such a built-in feature, requiring manual implementations for negative indexing and step slicing.

3. Code example

The following Java program demonstrates various string-slicing techniques, including basic substring extraction, negative indexing, step slicing, reversing a string, and negative step slicing.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.example;
 
public class StringSlicingExamples {
  private static void basicSubstring(String text, int start, int end) {
    System.out.println("Basic Slicing:");
    // Ensure valid indices
    if (start < 0)
      start = 0;
    if (end > text.length())
      end = text.length();
    if (start > end) {
      System.out.println(
          "Invalid indices: start index cannot be greater than end index.");
      return;
    }
 
    System.out.println(text.substring(start, end));
  }
 
  private static void negativeIndexing(String text, int negativeStart, Integer negativeEnd) {
    System.out.println("\nNegative Indexing:");
 
    int start = text.length() + negativeStart; // Convert negative index to positive
    int end = (negativeEnd != null) ? text.length() + negativeEnd : text.length();
    // Ensure valid indices
    if (start < 0)
      start = 0;
    if (end > text.length())
      end = text.length();
 
    System.out.println(text.substring(start, end));
  }
 
  private static String sliceWithStep(String text, int start, int end, int step) {
    StringBuilder result = new StringBuilder();
    for (int i = start; i < end; i += step) {
      result.append(text.charAt(i));
    }
    return result.toString();
  }
 
  private static String sliceWithNegativeStep(String text, int start, int end, int step) {
    StringBuilder result = new StringBuilder();
    for (int i = start; i > end; i += step) { // Looping in reverse direction
      result.append(text.charAt(i));
    }
    return result.toString();
  }
 
  private static void reverseString(String text) {
    System.out.println("\nReversed String:");
    // Reverses "Hello, World!" -> "!dlroW ,olleH"
    String reversed = new StringBuilder(text).reverse().toString();
    System.out.println(reversed);
  }
 
  public static void main(String[] args) {
    String text = "Hello, World!";
    // Perform basic substring slicing
    basicSubstring(text, 0, 5); // Extracts "Hello"
    basicSubstring(text, 7, 12); // Extracts "World"
    // Demonstrate negative indexing
    negativeIndexing(text, -6, null); // Extracts "World!"
    // Demonstrate step slicing
    System.out.println("\nStep Slicing:");
    System.out.println(sliceWithStep(text, 0, text.length(), 2)); // Output: Hlo ol!
    // Reverse a string
    reverseString(text);
    // Demonstrate negative step slicing
    System.out.println("\nNegative Step Slicing:");
    System.out.println(sliceWithNegativeStep(text, 10, 2, -2)); // Output: Wlo
  }
}

3.1 Code Explanation and Output

  • Basic Substring Extraction: The Java method basicSubstring extracts a substring from a given string using dynamic start and end indices. It ensures that the start index is not less than zero and the end index does not exceed the string length, preventing errors. If the start index is greater than the end index, an error message is displayed. The method prints the extracted substring based on the provided indices.
  • Negative Indexing: This Java method, negativeIndexing, allows extracting a substring using negative indices, similar to Python. It takes a string, a negative start index, and an optional negative end index. The negative indices are converted to positive by adding them to the string length. If no end index is provided, it defaults to the full length of the string. To prevent errors, the method ensures the start index is not less than zero and the end index does not exceed the string length. Finally, it prints the extracted substring.
  • Implementing Step Slicing: Python allows slicing with a step value using text[start:stop:step], but Java does not have built-in support for steps. Instead, we achieve this by iterating over the string with a loop. For example, extracting every second character results in “Hlo ol!”.
  • Reversing a String: In Python, reversing a string is as simple as using text[::-1]. In Java, we achieve this using StringBuilder.reverse(). For example, this method transforms “Hello, World!” into “!dlroW ,olleH”.
  • Implementing Negative Step Slicing: Python allows negative steps like text[10:2:-2] to extract characters in reverse order with a step. Since Java does not support this directly, we use a loop to achieve the same functionality. For example, extracting every second character in reverse results in “Wlo”.

The following output is produced when the code is executed:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
Basic Slicing:
Hello
World
 
Negative Indexing:
World!
 
Step Slicing:
Hlo ol!
 
Reversed String:
!dlroW ,olleH
 
Negative Step Slicing:
lo o

4. Conclusion

Python makes string slicing easy with its start:stop:step notation, while Java requires substring() and loops for similar functionality. By implementing custom methods, we can achieve similar results in Java.

Yatin Batra

An experience full-stack engineer well versed with Core Java, Spring/Springboot, MVC, Security, AOP, Frontend (Angular & React), and cloud technologies (such as AWS, GCP, Jenkins, Docker, K8).
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to top button