Your code looks good for very simple text. However, real life is much more complicated.
In languages other than English, there are characters that are combined from other characters. For example, the German Umlaut
ä can be written either as
\u00E4 or as an
a, followed by the combining dots above, which is written
a\u0308. Both representations look the same, yet your code treats them differently.
To get really international, you should read about the BreakIterator and how it breaks strings into "perceived characters". The Java type
char does not represent such a perceived character, but only a small part of it.
To test whether such a perceived character (which is really a
String in Java) is alphabetic, I guess if suffices to test whether that string contains an alphabetic code point (not char). Have a look at
Learning how to handle international text properly takes time. Don't rush into it, and take the time needed. Here a little, there a little. It's impossible to get "the single correct algorithm" since languages of the world differ a lot in their interpretation of what a character really is. To take the first step in this journey, don't treat a string as a sequence of
char, but as a sequence of code points. This alone makes your code handle most emojis correctly, and this simple step makes your code above-average already.