繁体   English   中英

使用 join() 方法时出现错误无法解析 'String' 中的方法 'join'

[英]Getting the error Cannot resolve method 'join' in 'String' when using the join() method

基本上我想要做的就是将每个数组元素放在一个新行上,但是当使用 join() 方法时,我收到错误,无法解析“String”中的方法“join”。

public class revision_testing extends AppCompatActivity {

    start_timetable start_timetable = new start_timetable();
    revision_time revision_time = new revision_time();
    public int append_counter = 0;
    public int revision_days = 25; //FOR TEST
    String[] all_dates = new String[revision_days];

    String date=start_timetable.clicked_date;

    public int day=start_timetable.day;
    public int month=start_timetable.month;
    public int year=start_timetable.year;
    int [] days_in_months = {31,28,31,30,31,30,31,31,30,31,30,31};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_revision_testing);
        getSupportActionBar().hide();

        for(int i=revision_days;i>0;i--){
            if (day >0){
                all_dates[append_counter] = year+"/"+month+"/"+day;
                day--;
                append_counter++;

            }else {
                day=days_in_months[month];
                month++;
                all_dates[append_counter] = year+"/"+month+"/"+day;
                day--;
                append_counter++;
            }
        }

        all_dates= all_dates.join("\n",all_dates);     //This line is the issue 
        }

很可能您想使用String.join方法而不是all_dates.join

String allDatesJoined = String.join("\n", all_dates);

您还将结果分配回all_dates数组。 您需要告诉 Java 您要使用数组中的哪个位置。 如果要分配给第一个数组位置,请使用all_dates[0]

all_dates[0] = allDatesJoined;

您可以使用 Java8 流 API 实现您的逻辑,如下所示。

System.out.println( Arrays.stream(all_dates).collect(Collectors.joining(",")));

您可以使用任何分隔符。 在这里我使用了',' ,但您也可以使用\\n

Arrays.stream(all_dates).collect(Collectors.joining("\\n")));

您将获得有关Collctors.joining详细信息

首先,您不能将连接操作的结果分配给 all_dates 给它自己,因为它是一个String[] 您需要将结果分配给String变量。

您可以使用 Java 8 Stream API 将数组的内容与换行符连接起来,如下所示:

String all_dates_concatentated = Arrays.stream(all_dates).collect(Collectors.joining("\n"));

有关更多详细信息,您可以参考java.util.stream.Collectors类的 Javadoc

我可以看到您的代码存在三个问题:

  1. 问题#1 - 不考虑闰年:你总是在Feb使用28天,这是不正确的。 闰年有29天。 这是java.time API 派上用场的地方,例如

    import java.time.Month; import java.time.Year; public class Main { public static void main(String[] args) { int year1 = 2019; int year2 = 2020; int month = 1; int lengthOfMonth = Month.values()[month].length(Year.of(year1).isLeap()); System.out.println("Length of Feb in the year, " + year1 + " is " + lengthOfMonth); lengthOfMonth = Month.values()[month].length(Year.of(year2).isLeap()); System.out.println("Length of Feb in the year, " + year2 + " is " + lengthOfMonth); } }

    输出:

     Length of Feb in the year, 2019 is 28 Length of Feb in the year, 2020 is 29

    因此,您应该从代码中删除数组days_in_months并将day=days_in_months[month]替换为day = Month.values()[month].length(Year.of(year).isLeap())

  2. 问题#2 - 尝试以非静态方式调用static函数String.join并且也在数组变量而不是String变量上调用:您需要将其用作String.join("\\n", all_dates)

  3. 问题#3 - 尝试将连接的字符串分配给数组:注意String.join返回一个String值,而不是数组。 因此,您需要将连接的字符串分配给String变量(例如String allDatesStr = String.join("\\n", all_dates) ),而不是数组变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM