Поверните этот
открытый класс RectangleCalculator {import java.awt.Rectangle
в этот
import java .awt.Rectangle; public class RectangleCalculator {
Рассмотрим, что происходит, когда вы определяете int внутри вашего класса:
public class Foo {int theFoo;
Компилятор говорит: «О, у меня есть новая переменная, называемая theFoo
, типа int
! Лучше я решил ИНТ
!» Ну, когда вы вставляете оператор import внутри, он читает его так и говорит: «О, у меня есть новая переменная, называемая java.awt.Rectangle
, типа import
Я лучше решил import
... подождите, я не могу разрешить import
:-( "
И ваш компилятор становится грустным.
/^([^,]*,){21}[^,]*$/
То есть:
^ Start of string
( Start of group
[^,]* Any character except comma, zero or more times
, A comma
){21} End and repeat the group 21 times
[^,]* Any character except comma, zero or more times again
$ End of string
Точно 21 запятая:
^([^,]*,){21}[^,]$
Не менее 21 запятая:
^([^,]?,){21}.*$
.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,
, если ровно 21:
/^[^,]*(,[^,]*){21}$/
, если не менее 21:
/(,[^,]*){21}/
Однако я бы предложил не использовать регулярное выражение для такой простой задачи. Потому что он медленный.
Какой язык? Вероятно, есть более простой метод.
Например ...
В CFML вы можете просто увидеть, есть ли ListLen(MyString)
22
. На Java вы можете сравните MyString.split(',')
с 22
и т. д. ...
var valid = ((" " + input + " ").split(",").length == 22);
или ...
var valid = 21 == (function(input){
var ret = 0;
for (var i=0; i<input.length; i++)
if (input.substr(i,1) == ",")
ret++;
return ret
})();
Будет работать лучше, чем ...
var valid = (/^([^,]*,){21}[^,]*$/).test(input);
Быстрее и понятнее перебирать строку, подсчитывать количество найденных запятых, а затем сравнивать ее с 21.