Строка разделения с точкой как разделитель

Ваш объект Stock принимает String в качестве первого и второго входных данных:

Stock(String s, String n, double previousClosingPrice, double currentPrice)

В текущем состоянии вы не предоставляете ему String (я полагаю, опечатка, вы забыли двойные кавычки), поэтому измените ваши строки на:

  Stock s1 = new Stock("GOG", "Google", 134.67, 131.98);
  Stock s2 = new Stock("MSF", "Microsoft", 156.52, 161.22);

То для первой части сообщения об ошибке.

Следующая проблема, с которой вы столкнулись, заключается в том, что в вашем методе currentPrice () есть опечатка - я предполагаю, что она должна быть setCurrentPrice.

Далее: в вашем toString () отсутствует оператор возврата.

Далее: ваши переменные, которые вы используете, такие как close, price, change, нигде не установлены. Вам нужно установить их где-нибудь, прежде чем использовать их в качестве ввода параметров.

91
задан c0der 18 December 2018 в 18:05
поделиться

9 ответов

split () принимает регулярное выражение, поэтому вам нужно экранировать . , чтобы не рассматривать его как метасимвол регулярного выражения. Вот пример:

String[] fn = filename.split("\\."); 
return fn[0];
164
ответ дан 24 November 2019 в 06:43
поделиться

Используя ApacheCommons это является самым простым:

File file = ...
FilenameUtils.getBaseName(file.getName());

Примечание, это также извлекает имя файла из полного пути.

0
ответ дан 24 November 2019 в 06:43
поделиться

Разделение должно принимать регулярное выражение в качестве аргумента ... Просто замените "." на "\\."

1
ответ дан 24 November 2019 в 06:43
поделиться

Поскольку DOT (.) Считается специальным символом, а метод разделения String ожидает регулярного выражения, которое вам нужно сделать следующим образом -

String[] fn = filename.split("\\.");
return fn[0];

В java специальные символы должны быть быть экранированным с помощью "\", но поскольку "\" также является специальным символом в Java, вам нужно снова экранировать его с помощью другого "\"!

6
ответ дан 24 November 2019 в 06:43
поделиться

Разве не было бы более эффективным использовать

 filename.substring(0, filename.indexOf("."))

, если вам нужно только то, что происходит до первой точки?

2
ответ дан 24 November 2019 в 06:43
поделиться

Split использует регулярные выражения, где '.' это специальный символ, обозначающий что угодно. Вам нужно избежать этого, если вы действительно хотите, чтобы он совпадал с '.' символ:

String[] fn = filename.split("\\.");

(один '\' для экранирования '.' в регулярном выражении, а другой для экранирования первого символа в строке Java)

Также я бы не предлагал возвращать fn [0], поскольку if у вас есть файл с именем something.blabla.txt , это допустимое имя, фактическое имя файла которого вы не вернете. Вместо этого я думаю, что лучше использовать:

int idx = filename.lastIndexOf('.');
return filename.subString(0, idx);
16
ответ дан 24 November 2019 в 06:43
поделиться

метод String#split(String) использует регулярные выражения. В регулярных выражениях символ "." означает "любой символ". Вы можете избежать такого поведения, либо экранировав символ "."

filename.split("\\.");

либо указав методу split разделять по классу символов:

filename.split("[.]");

Классы символов - это коллекции символов. Вы можете написать

filename.split("[-.;ld7]");

и имя файла будет разделено на все "-", ".", ";", "l", "d" или "7". Внутри классов символов символ "." не является специальным символом ("метасимволом").

14
ответ дан 24 November 2019 в 06:43
поделиться

split принимает в качестве аргумента regex. Поэтому вы должны передать "\." вместо ".", потому что "." является метасимволом в regex.

-1
ответ дан 24 November 2019 в 06:43
поделиться

Обычно НЕ стоит разоблачать его вручную. Для этой задачи в классе Pattern есть метод:

java.util.regex
static String quote(String s) 
2
ответ дан 24 November 2019 в 06:43
поделиться
Другие вопросы по тегам:

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