Чтобы иметь защищенный шаблон, вы можете заменить все символы на «\\\\», за исключением цифр и букв. И после этого вы можете поместить в этот защищенный шаблон свои специальные символы, чтобы заставить этот шаблон работать не как глупый цитируемый текст, а действительно как паттен, но ваш собственный. Без специальных символов пользователя.
public class Test {
public static void main(String[] args) {
String str = "y z (111)";
String p1 = "x x (111)";
String p2 = ".* .* \\(111\\)";
p1 = escapeRE(p1);
p1 = p1.replace("x", ".*");
System.out.println( p1 + "-->" + str.matches(p1) );
//.*\ .*\ \(111\)-->true
System.out.println( p2 + "-->" + str.matches(p2) );
//.* .* \(111\)-->true
}
public static String escapeRE(String str) {
//Pattern escaper = Pattern.compile("([^a-zA-z0-9])");
//return escaper.matcher(str).replaceAll("\\\\$1");
return str.replaceAll("([^a-zA-Z0-9])", "\\\\$1");
}
}
Есть класс под названием sun.misc.Unsafe
, это правда. Но он не использует указатели в коде Java (поскольку в Java нет указателей, хотя я согласен с тем, что java-ссылки похожи по своей концепции), большая часть его реализована с использованием нативного кода.
Как я упоминал в комментариях, это не является частью общедоступного API и не должно использоваться клиентским кодом. Тем не менее, вы можете увидеть это на работе, когда вы посмотрите на источники классов Atomic*
в в пакете java.util.concurrent.atomic
.
Указатель - это концепция указания на ссылку. В C и C ++ вы можете явно обращаться к указателю, но в Java мы используем ссылку для указания объектов. Например, если вы передаете экземпляр методу, мы передаем его ссылку, но в итоге указатель передается. когда вы изменяете состояние экземпляра в методе, оно отражает, когда этот экземпляр используется после завершения вызова метода.
Мы используем ссылку в Java, который является указателем относительно JVM.
Когда мы используем новый оператор, он создает экземпляр в куче и возвращает адрес ссылки, на которую он указывает.
Я полагаю, что это ответило бы на ваш вопрос, если бы вы не могли прокомментировать мой ответ.
У Java есть указатели.
Путаница, имеет ли Java указатели или нет, тесно связана с обсуждением, является ли Java вызовом по ссылке или вызовом по значению.
Неинформированные люди думают, что в Java нет указателей, и поскольку метод может изменить объект, который был передан, с эффектами этого изменения, видимыми для вызывающего, они считают, что его нужно вызывать по ссылке.
Это не правильно, однако.
Что происходит, так это то, что в Java указатели передаются по значению . В Java нет других типов переменных для объектов, кроме переменных-указателей, и нет вызова по ссылке.
«Небезопасная» история - это совсем другое. Обычно это отличается от вопроса, есть ли в Java указатели или нет. Указатели Java безопасны; они указывают на объекты и, используя обычные языковые конструкции, ими нельзя манипулировать, чтобы указывать на произвольные области памяти.
Существует, однако, JNI, но потом нативный код делает потенциально небезопасные вещи, а не код Java.
Существует также Java в реальном времени (jsr-1), где вы абсолютно точно можете получить доступ к определенным областям памяти в вашей системе. Это, однако, очень специфическая и довольно редкая версия Java, которая в основном используется для встраиваемых целей. Если бы это подразумевалось, я предполагаю, что это было бы явно упомянуто.