Ваш объект 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
, нигде не установлены. Вам нужно установить их где-нибудь, прежде чем использовать их в качестве ввода параметров.
split ()
принимает регулярное выражение, поэтому вам нужно экранировать .
, чтобы не рассматривать его как метасимвол регулярного выражения. Вот пример:
String[] fn = filename.split("\\.");
return fn[0];
Используя ApacheCommons это является самым простым:
File file = ...
FilenameUtils.getBaseName(file.getName());
Примечание, это также извлекает имя файла из полного пути.
Разделение должно принимать регулярное выражение в качестве аргумента ... Просто замените "."
на "\\."
Поскольку DOT (.) Считается специальным символом, а метод разделения String ожидает регулярного выражения, которое вам нужно сделать следующим образом -
String[] fn = filename.split("\\.");
return fn[0];
В java специальные символы должны быть быть экранированным с помощью "\", но поскольку "\" также является специальным символом в Java, вам нужно снова экранировать его с помощью другого "\"!
Разве не было бы более эффективным использовать
filename.substring(0, filename.indexOf("."))
, если вам нужно только то, что происходит до первой точки?
Split использует регулярные выражения, где '.' это специальный символ, обозначающий что угодно. Вам нужно избежать этого, если вы действительно хотите, чтобы он совпадал с '.' символ:
String[] fn = filename.split("\\.");
(один '\' для экранирования '.' в регулярном выражении, а другой для экранирования первого символа в строке Java)
Также я бы не предлагал возвращать fn [0], поскольку if у вас есть файл с именем something.blabla.txt
, это допустимое имя, фактическое имя файла которого вы не вернете. Вместо этого я думаю, что лучше использовать:
int idx = filename.lastIndexOf('.');
return filename.subString(0, idx);
метод String#split(String) использует регулярные выражения. В регулярных выражениях символ "." означает "любой символ". Вы можете избежать такого поведения, либо экранировав символ "."
filename.split("\\.");
либо указав методу split разделять по классу символов:
filename.split("[.]");
Классы символов - это коллекции символов. Вы можете написать
filename.split("[-.;ld7]");
и имя файла будет разделено на все "-", ".", ";", "l", "d" или "7". Внутри классов символов символ "." не является специальным символом ("метасимволом").
split
принимает в качестве аргумента regex. Поэтому вы должны передать "\."
вместо "."
, потому что "."
является метасимволом в regex.
Обычно НЕ стоит разоблачать его вручную. Для этой задачи в классе Pattern есть метод:
java.util.regex
static String quote(String s)