Конструктор для рационального числа [дубликат]

За исключением утверждения с нулевой длиной, символ на входе всегда будет потребляться при сопоставлении. Если вы когда-либо находитесь в случае, когда вы хотите захватить определенный символ во входной строке больше один раз, вам понадобится утверждение нулевой длины в регулярном выражении.

Существует несколько утверждений с нулевой длиной (например, ^ (начало ввода / строки), $ (конец ввода / строка), \b (граница слова)), но look-arounds ((?<=) позитивный внешний вид и (?=) позитивный прогноз вперед ) - это единственный способ захватить перекрывающий текст из ввода. Отрицательные взгляды ((?<!) негативный внешний вид, (?!) негативный взгляд вперед] здесь не очень полезны: если они утверждают, что истина, то захват внутри потерпел неудачу; если они утверждают false, то совпадение не выполняется. Эти утверждения являются нулевой длиной (как упоминалось ранее), что означает, что они будут утверждать, не потребляя символы во входной строке. Они будут фактически соответствовать пустой строке, если утверждение прошло.

Применяя указанное выше знание, регулярное выражение, которое работает для вашего случая, будет:

(?=(\w\w))
280
задан Taryn 22 March 2017 в 17:17
поделиться

10 ответов

Один из способов получить эту ошибку в Eclipse:

  1. Определить класс A в src/test/java.
  2. Определить другой класс B в src/main/java который использует класс A.

Результат: Eclipse будет компилировать код, но maven предоставит «Невозможно найти символ».

Основная причина: Eclipse использует комбинированный путь сборки для основного и тестового деревьев. К сожалению, он не поддерживает использование разных путей сборки для разных частей проекта Eclipse, чего требует Maven.

Решение:

  1. Не определяйте свои зависимости, которые путь; то есть не делайте эту ошибку.
  2. Регулярно создавайте свою кодовую базу с помощью Maven, чтобы вы заранее поняли эту ошибку. Один из способов сделать это - использовать CI-сервер.
290
ответ дан Stephen C 15 August 2018 в 18:00
поделиться
  • 1
    У меня была другая ситуация, когда эта ошибка компиляции возникла, когда eclipse не увидела проблему: два класса с зависимостями, определенные в соответствующем классе. В моем случае у меня было перечисление, реализующее интерфейс, определенный в классе, где я глупо уже использовал перечисление. – Jogi 23 May 2016 в 07:28
  • 2
    Как и в предыдущем комментарии, когда я компилирую и запускаю свою программу из Eclipse, это не проблема. Компиляция его с консоли вызывает кучу этих «Невозможно найти символ». ошибки, часто связанные с последним элементом в импорте. Я понятия не имею, что вызывает это, потому что в коде нет ничего плохого. – Andres Stadelmann 27 May 2016 в 16:42
  • 3
    Каково решение этого? – user 15 June 2016 в 10:27
  • 4
    все, что вы используете в src / main / java, должно быть определено в src / main / java или в любых зависимостях для компиляции / выполнения (не зависимости от теста). – Joel Costigliola 16 June 2016 в 04:27
  • 5
    Другой распространенный, который я не вижу в списке (возможно, я просто пропустил его в списке) - это метод с именем без () после него, как String s = ""; int len = s.length; – Ryan Haining 3 November 2017 в 01:59
  • 6
    Он указан сейчас. – Stephen C 4 February 2018 в 06:18
  • 7
    Люди, новые для Java, иногда смешивают типы массивов со своими типами компонентов, например String[] strings = { "hello", "world" }; strings.chatAt(3);. – MC Emperor 13 August 2018 в 11:14
297
ответ дан Stephen C 5 September 2018 в 17:07
поделиться

«Невозможно найти» означает, что компилятор, который не может найти подходящую переменную, метод, класс и т. д., если вы получили этот массаж ошибок, прежде всего, вы хотите найти строку кода, где вы получите массаж с ошибкой. И то вы сможете найти, какая переменная, метод или класс не определены перед ее использованием. После подтверждения инициализации этой переменной, метод или класс могут быть использованы для последующего использования ... Рассмотрим следующий пример.

I создадим демонстрационный класс и напечатаем имя ...

class demo{ 
      public static void main(String a[]){
             System.out.print(name);
      }
}

Теперь посмотрим на результат.

Эта ошибка говорит: «имя переменной не может найти». Определить и инициализировать значение для переменной «имя» можно отменить эту ошибку. Фактически, это

class demo{ 
      public static void main(String a[]){

             String name="smith";

             System.out.print(name);
      }
}

Теперь посмотрим на новый вывод ...

Ok Успешно решена эта ошибка .. В то же время, если вы можете получить «не можете найти метод» или «не можете найдите класс «что-то». Сначала определите класс или метод и после использования ..

2
ответ дан GT_hash 15 August 2018 в 18:00
поделиться

Если вы получаете эту ошибку в сборке где-то в другом месте, в то время как ваша среда IDE говорит, что все в порядке, проверьте, используете ли вы одни и те же версии Java в обоих местах.

Например, Java 7 и Java 8 имеют разные API, поэтому вызов несуществующего API в старой версии Java приведет к этой ошибке.

2
ответ дан Jonathan Lin 15 August 2018 в 18:00
поделиться

Еще один пример «Variable is out of scope»

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

Рассмотрим этот код:

if(somethingIsTrue()) {
  String message = "Everything is fine";
} else {
  String message = "We have an error";
}
System.out.println(message);

Это неверный код. Поскольку ни одна из переменных с именем message не видна за пределами их соответствующей области действия - в данном случае это будут окружающие скобки {}.

Вы могли бы сказать: «Но переменная с именем отображается в любом виде, поэтому сообщение указано , определенное после if».

Но вы ошибаетесь.

У Java нет операторов free() или delete, поэтому он должен полагаться на область отслеживания переменных, чтобы узнать, когда переменные больше не используются (вместе со ссылками на эти переменные причины).

Это особенно плохо, если вы считаете, что сделали что-то хорошее. Я видел такую ​​ошибку после «оптимизации» кода следующим образом:

if(somethingIsTrue()) {
  String message = "Everything is fine";
  System.out.println(message);
} else {
  String message = "We have an error";
  System.out.println(message);
}

«О, есть дублированный код, давайте вытащить эту общую строку» -> и вот оно.

. Наиболее распространенным способом борьбы с этим видом проблемы является предварительная привязка значений else к именам переменных во внешней области, а затем переназначение, если:

String message = "We have an error";
if(somethingIsTrue()) {
  message = "Everything is fine";
} 
System.out.println(message);
13
ответ дан Ken Y-N 15 August 2018 в 18:00
поделиться
  • 1
    "Java не имеет операторов free () или delete, поэтому он должен полагаться на область отслеживания переменных, чтобы узнать, когда переменные больше не используются (вместе со ссылками на эти переменные причины). & quot; - Хотя это правда, это не актуально. C и C ++ имеют операторы free / delete соответственно, и все же эквивалентный код C / C ++ для ваших примеров будет незаконным. C и C ++ блоки ограничивают область переменных, как в Java. На самом деле это справедливо для большинства «блок-структурированных». языки. – Stephen C 1 November 2017 в 14:41
  • 2
    Лучшим решением для кода, который назначает другое значение для каждой ветви, является использование декларации переменной blank final . – Daniel Pryden 3 April 2018 в 13:43

Я тоже получал эту ошибку. (для которого я googled, и я был направлен на эту страницу)

Проблема: я вызывал статический метод, определенный в классе проекта A из класса, определенного в другом проекте B. Я получал следующее error:

error: cannot find symbol

Решение: я решил это, сначала построив проект, где метод определен, а затем проект, из которого вызывается метод.

0
ответ дан Maria 15 August 2018 в 18:00
поделиться

Для подсказок посмотрите на имя имени класса, которое выдает ошибку и номер строки, например: Ошибка компиляции [ERROR] \ applications \ xxxxx.java: [44,30] ошибка: не удается найти символ

Еще одна причина - неподдерживаемый метод для java-версии: jdk7 vs 8. Проверьте свой% JAVA_HOME%

0
ответ дан Striker 15 August 2018 в 18:00
поделиться
  • 1
    Это просто говорит то же самое, что говорят другие ответы. – Stephen C 6 July 2018 в 11:03

Вы также получите эту ошибку, если забудете new:

String s = String();

в сравнении с

String s = new String();
19
ответ дан thinkterry 15 August 2018 в 18:00
поделиться
0
ответ дан avp 5 September 2018 в 17:07
поделиться
-2
ответ дан BlaCk HoLe 5 September 2018 в 17:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: