В Java можно ли проверить, является ли строка только ASCII?



символ.isLetter(C) возвращает true, если символ является буквой. Но есть ли способ быстро найти, если строка содержит только базовые символы ASCII?

507   11  

11 ответов:

используя гуавы, вы могли бы просто написать:

boolean isAscii = CharMatcher.ASCII.matchesAllOf(someString);

начиная с Guava 19.0, вы должны использовать CharMatcher.ascii().

вы можете сделать это с помощью java.НИО.кодировка.Символов.

import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;

public class StringUtils {

  static CharsetEncoder asciiEncoder = 
      Charset.forName("US-ASCII").newEncoder(); // or "ISO-8859-1" for ISO Latin 1

  public static boolean isPureAscii(String v) {
    return asciiEncoder.canEncode(v);
  }

  public static void main (String args[])
    throws Exception {

     String test = "Réal";
     System.out.println(test + " isPureAscii() : " + StringUtils.isPureAscii(test));
     test = "Real";
     System.out.println(test + " isPureAscii() : " + StringUtils.isPureAscii(test));

     /*
      * output :
      *   Réal isPureAscii() : false
      *   Real isPureAscii() : true
      */
  }
}

обнаружение символа не ASCII в строке

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

Вы можете использовать эту одну строку:

text.matches("\A\p{ASCII}*\z")

все программы пример:

public class Main {
    public static void main(String[] args) {
        char nonAscii = 0x00FF;
        String asciiText = "Hello";
        String nonAsciiText = "Buy: " + nonAscii;
        System.out.println(asciiText.matches("\A\p{ASCII}*\z"));
        System.out.println(nonAsciiText.matches("\A\p{ASCII}*\z"));
    }
}

повторите строку и убедитесь, что все символы имеют значение меньше 128.

строки Java концептуально кодируются как UTF-16. В UTF-16 набор символов ASCII кодируется как значения 0-127, а кодировка для любого символа, отличного от ASCII (который может состоять из более чем одного символа Java), гарантированно не включает числа 0-127

или вы копируете код из IDN класса.

// to check if a string only contains US-ASCII code point
//
private static boolean isAllASCII(String input) {
    boolean isASCII = true;
    for (int i = 0; i < input.length(); i++) {
        int c = input.charAt(i);
        if (c > 0x7F) {
            isASCII = false;
            break;
        }
    }
    return isASCII;
}

commons-lang3 от Apache содержит ценные утилиты / удобные методы для всех видов "проблем", в том числе этого.

System.out.println(StringUtils.isAsciiPrintable("!@£$%^&!@£$%^"));

попробуйте это:

for (char c: string.toCharArray()){
  if (((int)c)>127){
    return false;
  } 
}
return true;

пройтись по строке, и использовать, используя метод charat (), чтобы получить шар. Затем обработайте его как int и посмотрите, имеет ли он значение unicode (надмножество ASCII), которое вам нравится.

перерыв на первый вам не нравится.

private static boolean isASCII(String s) 
{
    for (int i = 0; i < s.length(); i++) 
        if (s.charAt(i) > 127) 
            return false;
    return true;
}
//return is uppercase or lowercase
public boolean isASCIILetter(char c) {
  return (c > 64 && c < 91) || (c > 96 && c < 123);
}

Это было возможно. Довольно проблемно.

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;

public class EncodingTest {

    static CharsetEncoder asciiEncoder = Charset.forName("US-ASCII")
            .newEncoder();

    public static void main(String[] args) {

        String testStr = "¤EÀsÆW°ê»Ú®i¶T¤¤¤ß3¼Ó®i¶TÆU2~~KITEC 3/F Rotunda 2";
        String[] strArr = testStr.split("~~", 2);
        int count = 0;
        boolean encodeFlag = false;

        do {
            encodeFlag = asciiEncoderTest(strArr[count]);
            System.out.println(encodeFlag);
            count++;
        } while (count < strArr.length);
    }

    public static boolean asciiEncoderTest(String test) {
        boolean encodeFlag = false;
        try {
            encodeFlag = asciiEncoder.canEncode(new String(test
                    .getBytes("ISO8859_1"), "BIG5"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return encodeFlag;
    }
}

Comments

    Ничего не найдено.