Skip to content

Instantly share code, notes, and snippets.

@ramyo564
Created December 15, 2023 13:32
Show Gist options
  • Save ramyo564/a984d7b9cf60b516103d04356757e030 to your computer and use it in GitHub Desktop.
Save ramyo564/a984d7b9cf60b516103d04356757e030 to your computer and use it in GitHub Desktop.
import java.util.Objects;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
long totalCount = 127;
long pageIndex = 1;
Pager pager = new Pager(totalCount);
System.out.println(pager.html(pageIndex));
}
public static class Pager {
private static final int PAGE_SIZE = 10; // 한 화면에 보여질 페이지 수
private long totalCount; // 전체 글의 수
public Pager(long totalCount) {
this.totalCount = totalCount;
}
public String html(long pageIndex) {
StringBuilder sb = new StringBuilder();
long totalPage = (long) Math.ceil((double) totalCount / PAGE_SIZE); // 전체 페이지 수
long startPage = ((pageIndex - 1) / PAGE_SIZE) * PAGE_SIZE + 1; // 현재 페이지 블럭의 시작 페이지
long endPage = Math.min(startPage + PAGE_SIZE - 1, totalPage); // 현재 페이지 블럭의 끝 페이지
sb.append("<div class=\"pagination\">");
// [처음]
if (startPage > PAGE_SIZE) {
sb.append("<a href=\"?page=1\">[처음]</a>");
}
// [이전]
if (startPage > 1) {
sb.append("<a href=\"?page=").append(startPage - 1).append("\">[이전]</a>");
}
// 페이지 번호 출력
for (long i = startPage; i <= endPage; i++) {
if (i == pageIndex) {
// 현재 페이지
sb.append("<span style=\"color:red;\">").append(i).append("</span>");
} else {
// 다른 페이지
sb.append("<a href=\"?page=").append(i).append("\">").append(i).append("</a>");
}
}
// [다음]
if (endPage < totalPage) {
sb.append("<a href=\"?page=").append(endPage + 1).append("\">[다음]</a>");
}
// [마지막]
if (endPage < totalPage - PAGE_SIZE) {
sb.append("<a href=\"?page=").append(totalPage).append("\">[마지막]</a>");
}
sb.append("</div>");
return sb.toString();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment